第三章
javascript的数据类型分为两类:原始类型(数字、字符串、布尔值、null、undefined)和对象类型;
3.6、原始类型不可改变,没有属性和方法,但若要用原始类型的属性或方法,javascript会自动为该原始类型值生成一个临时的对象,比如根据字符串来生成临时的String对象,使用完毕后临时对象会自动删除;如果试图给该临时对象赋值,则程序会忽略此操作;
3.7原始类型的比较是值得比较,只有在它们的值相等时才相等,比如比较两个单独的字符串当且仅当它们的长度相等且每个索引的字符都相等时,才认为是相等;
对象类型的比较的引用的比较,当且仅当它们引用的是同一个基对象时才相等,否则即使值和类型、属性都相等也不行
3.10 函数中的局部变量会覆盖全局变量,但不会影响全局变量;
全局变量的声明可以不带var,局部变量必须带,否则局部变量会影响全局变量的值;
3.10.1 JavaScript函数中声明的所有变量都会被编译器“提前”至函数的顶部,这意味着变量在声明之前就已经在函数中可用,但只有遇到var声明才会真正赋值。并且函数中的局部变量会覆盖同名全局变量,意味着如果需要将全局变量传到函数中需要通过传参的方式;
第六章 对象
6.2 Javascript中只有在查询属性时才能体会继承的存在,而设置属性则与继承无关;
对象的属性是可以继承(inherit())的,若父类中的某个属性是只读的,当在子类中给该属性赋值时会失败;若父类中该属性是可写的,当在子类中给该属性赋值时可以新建一个属性覆盖父类中的属性;
6.3 delete只能删除对象的自有属性,不能删除继承来的属性;
delete不能删除可配置性为false的属性;
6.6 属性的getter方法为可读属性,setter为可写属性;
8.1 函数的嵌套:被嵌套的函数可以访问嵌套它们的函数的参数和变量;
8.2 当函数作为一个对象的属性时,函数中的this代表的就是对象本身;
8.3 当传入的实参比函数定义的形参要少时,剩下的形参会自动定义为undefined;
8.3.2 当传入的实参比函数定义的形参要多时,可以在函数中使用arguments标识符来获取实参的引用,入arguments[0]是第一个实参,arguments.length就是实参的个数;
8.3.3 为了实现以名/值对的形式传入参数,可以传入一个对象作为实参,在对象中定义好键名和键值;
call, apply作用就是借用别人的方法来调用,就像调用自己的一样;call, apply方法区别是,从第二个参数起, call方法参数将依次传递给借用的方法作参数, 而apply直接将这些参数放到一个数组中再传递, 最后借用方法的参数列表是一样的。
8.6 闭包返回的是函数,特点是闭包函数中的局部变量可以不受全局同名变量的影响,相对独立;
9.2 使用new调用构造函数会自动创建一个新对象,构造函数本身只需要初始化这个新对象的状态。
构造函数的prototype属性被用作新对象的原型,通过同一个构造函数创建的对象都继承同一个对象;
9.2.1 instanceof运算符检查的是对象是否继承自某构造函数的prototype属性对象;
9.2.2 F函数对象是构造函数,则F.prototype.constructor == F ;
9.4 javascript中基于原型的继承机制是动态的,对象从其原型继承属性,创造对象之后原型的属性发生改变,将会影响到该原型所有的实例对象;