读书笔记-你不知道的js上-对象

QH-Jimmy QH-Jimmy     2022-08-23     346

关键词:

好想要对象···

 

  函数的调用位置不同会造成this绑定对象不同。但是对象到底是什么,为什么要绑定他们呢?(可以可以,我也不太懂)

  

语法

  对象声明有两个形式:

  1、字面量 => var obj = { ... };

  2、构造形式 => var obj = new Object();

  两种形式生成的对象是一样的,唯一的区别是,在文字声明中可以添加多个键值对,构造形式只能逐个添加。

 

类型

  JS中有六种主要类型:string、number、booleam、null、undefined、object。

  注意,简单数据类型本身并不是对象,null有时会被当成一种对象类型,但是这其实只是语言本身的一个bug,即对null执行typeof null时会返回字符串object。实际上,null本身是基本类型。(原理是这样的,不同的对象在底层都表现为二进制,在JS中二进制的前三位都为0的话会被判断为object类型,null的二进制表示是全0,所以执行时会返回object。)

  有一种常见的错误是‘万物皆对象’,这显示是错误的(我去,被老师骗了)。

  实际上,JS中有许多特殊的对象子类型,称之为复杂基本类型。

  函数就是对象的一个子类型(技术角度来讲叫可调用对象)。JS中的函数是‘一等公民’,因为它们本质上和普通对象一样,所以可以像操作其他对象一样操作函数。

  数组也是对象的一种类型。

 

内置对象

  JS有一些对象子类型,通常被称为内置对象。

  包括String、Number、Boolean、Object、Function、Array、Date、RegExp、Error。

  内置对象可以当作构造函数来使用,从而可以构造一个对应子类型的新对象。

  如果用字面量形式创建number、string(var str = ‘jimmy‘,num = 1),调用对象方法(length)时会自动转换成对象并调用方法,然后还原为基本数据类型返回,这个过程是不可见的。但是也没有必要为了性能特地通过构造形式声明基本数据,这种转换十分频繁,所以底层已经做了优化,用字面量更好更快。

  null和undefined没有对应的构造形式,只有文字形式。

  Date只有构造,没有文字形式。

  对于Object、Array、Function、RegExp来说,无论使用哪种形式出来的都是对象。

  Error对象很少在代码中显示创建,一般在抛出异常的时候被自动创建。也可以用new Error()这种构造形式创建,一般来说,用不着。

  报错误信息,vue源码中用了console.error(),如下代码:

    warn = function(msg, vm) {
        if (hasConsole && (!config.silent)) {
            console.error("[Vue warn]: " + msg + " " + (
                vm ? formatLocation(formatComponentName(vm)) : ‘‘
            ));
        }
    };

  专门用来生成错误信息的函数,jQuery源码中反正是没见着,尤大还是很贴心的。

 

内容

  对象内容由键值对组成,键更像是一个指针,保存内容所在存储位置的地址。(ES6之前,不支持奇怪的键,所以只能用普通字符串定义键)

  可以用点访问和[]访问键,主要区别是点访问属性名必须满足标识符的命名规范,而[]可以接受任意形式的字符串。

  还有一个细微差别:

    function fn(a) {
        console.log(obj.a); //undefined
        console.log(obj[a]); //1
    }
    var obj = {
        ab: 1,
    }
    fn(‘ab‘);

  当访问的属性名作为参数传入函数时,使用[]访问才能正常得到结果。

  在对象中,属性名永远是字符串,如果使用其余类型的值作为属性名,会被强制调用toString方法。

    var obj = {}
    obj[true] = 1;
    obj[1] = 2;
    obj[obj] = 3;
    console.log(obj[‘true‘]); //1
    console.log(obj[‘1‘]); //2
    console.log(obj[‘[object Object]‘]); //3

  好玩!

 

 

可计算属性名

  ES6中可以使用表达式计算属性名。

      

  

读书笔记-你不知道的js中-promise

继续填坑模式  考虑下面的代码:functionfn(x){//dosomethingreturnnewPromise(function(resolve,reject){//调用resolve(..)和reject(...)});}varp=fn(2);  newPromise(..)模式通常称为revealingconstructor。传入函数会立即执行(不会像then(..)中的回调一样异步延 查看详情

你不知道的javascript(上卷)读书笔记之一----作用域

你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些”坑”,在这里写一些博客记录一下笔记以便消化吸收。1编译原理在此书中,开始便提出:Javascript是一门编译型语言,我... 查看详情

你不知道的javascript-上卷の读书笔记

本书主要从两个部分来进行阐述:作用域与闭包、this与对象原型。         一 作用域与闭包          1— 作用域对JavaScript而言,大部分情况下编译... 查看详情

读书笔记《你不知道的javascript(上卷)》——第二部分this和对象原型(代码片段)

文章目录第6章行为委托6.1面向委托的设计6.1.1类理论6.1.2委托理论1.互相委托(禁止)2.调试6.1.3比较思维模型6.2类与对象6.2.1控件“类”ES6的class语法糖6.2.2委托控件对象6.3更简洁的设计反类6.4更好的语法反词法6... 查看详情

你不知道的javascript中,读书笔记

七种内置类型null,undefined,boolean,number,string,object,symboltypeofnull===‘object‘//truenull是typeof是object的唯一的假值typeoffunction会返回‘function‘使用typeofx!==‘undefined‘比直接判断x更加安全,因为不会引发referenceerror 查看详情

你不知道的javascript(上卷)读书笔记之二----词法作用域

在前一篇文章中,我们把作用域定义为”管理、维护变量的一套规则”,接下来是时候来深入讨论一下Js的作用域问题了,首先我们要知道作用域一般有两种主要的工作类型,一种是词法作用域,一种是动态作用域,Javascript采用... 查看详情

你不知道的javascript--上卷--读书笔记1

作用域是什么?  答:在《你不知道的javascript》书中提到,作用域就是根据名称查找变量的一套规则。古语有“无规矩不成方圆”,但是没有方圆,规矩又给谁用?所以个人理解作用域就是“规矩”+”方圆“。作用域是在创... 查看详情

你不知道的javascript--上卷--读书笔记2

闭包是什么?  答:当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。通俗地来说:函数可以嵌套在其他函数中定义,这样它们就可以访问它们被定义时所处的作用域中的任... 查看详情

你不知道的javascript上卷-读书笔记-第2章词法作用域-2.2欺骗词法(代码片段)

你不知道的JavaScript上卷-读书笔记-第2章词法作用域-2.2欺骗词法作用域`eval`和`with`的缺点作用域JavaScript在ES6以前只有函数作用域。ES6开始支持块作用域:通常就是包裹的范围作用域中查找变量or函数的规则是从当前向... 查看详情

你不知道的javascript上卷-读书笔记-第2章词法作用域-2.2欺骗词法(代码片段)

你不知道的JavaScript上卷-读书笔记-第2章词法作用域-2.2欺骗词法作用域`eval`和`with`的缺点作用域JavaScript在ES6以前只有函数作用域。ES6开始支持块作用域:通常就是包裹的范围作用域中查找变量or函数的规则是从当前向... 查看详情

javascript中的this—你不知道的javascript上卷读书笔记

this是什么?this是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。当一个函数被调用时,会创建一个活动记录(有时... 查看详情

读书笔记你不知道的javascript(上卷)--作用域是什么

第一章作用域1、理解作用域几个名词的介绍引擎:从头到尾负责整个JavaScript程序的编译及执行过程编译器:负责语法分析及代码生成器等脏活累活作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实... 查看详情

读书笔记

...,让人心情急躁。再补充点之前读你不知道的JavaScript的读书笔记,和感悟。1、在数组上应用for..in循环有时候会产生出人意料的结果,因为这种枚举不止会包含所有的数值索引还会包括所有可枚举属性,例如:vararr=[];arr[0]=1;arr[1... 查看详情

《你必须知道的.net》读书笔记一:小oo有大智慧

此篇已收录至《你必须知道的.Net》读书笔记目录贴,点击访问该目录可以获取更多内容。一、对象   (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初始化,这样一个... 查看详情

《你不知道的js(中卷)》混合对象“类”(代码片段)

四、混合对象“类”:? 在研究类的具体机制之前,首先介绍面向类的设计模式:实例化(instantiation)、继承(inheritance)和(相对)多态(polymorphism)。一)、类理论:? 面向对象编程强调的是数据和操作数据的行为本质上是... 查看详情

你不知道的javascript(上卷卷)笔记

<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>你不知道的javascript(上卷)</title></head><body></body></html>   查看详情

《javascript设计模式》读书笔记二(封装和隐藏信息)

1.为什么要封装和信息隐藏做过编程的朋友们知道“耦合”这个词。事实上封装的效果就是为了解耦,让类和类之间没有太多的联系,防止某一天改动某一类的时候,产生“多米骨诺牌效应”。我们能够把信息隐藏看成目的,把... 查看详情

你不知道的javascript笔记

类型:JavaScript有7种内置类型空值(null)未定义(undefined)布尔值(boolean)数字(number)字符串(string)对象(object)符号(symbol)   除对象以外,其他统称为“基本类型” 用typeof运算符来查看值的类型typeofundefined ==="undefi... 查看详情