js-权威指南学习笔记2
第三章 类型、值和变量
1、JS的数据类型分为两类:原始类型(基本数据类型/不可变类型)和对象类型(引用数据类型/可变类型)。
JS中的原始类型包括数字/字符串/布尔值,还有两个特殊的:null和undefined。
对象是属性的集合。数组/函数是特殊的对象。
如果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数。每个构造函数定义了一类对象——由构造函数初始化的对象组成的集合。类可以看作是对象类型的子类型。有数组类/函数类/正则类/日期类/错误类。
2、从技术上讲,只有JS对象才能拥有方法。然而,数字/字符串/布尔值也可以拥有自己的方法(基本包装类型?)。在JS中,只有null和undefined无法拥有方法。
3、NaN不和任何值相等。判断变量是不是NaN的办法:x!=x(仅当x为NaN时为true)或者isNaN()函数(为NaN或非数字值时为true)。正零和负零除了作为除数时有差别(正无穷和负无穷),其他时候基本一样。
4、IEEE二进制浮点数有时会带来小的误差,所以在用作比较操作中时要注意。
5、布尔值可以使用toString()方法。
6、
undefined的可以认为是表示系统级的、出乎意料的或类似错误的值的空缺,而null是表示程序级的、正常的或者在意料之中的值的空缺。如果想将它们赋值给变量或属性,或将它们作为参数传入函数,最佳选择是使用null。
7、JS对象是一种复合值:它是属性或已命名值的集合。通过.符号可以引用属性值,当属性值是一个函数的时候,称其为方法。
8、只要引用了字符串s的属性,JS就会将字符串值通过调用new String(s)的方式转换为对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁。数字和布尔值同理。存取字符串/数字/布尔值的属性时创建的临时对象称作包装对象。
9、通过String()/Number()/Boolean()构造函数可以显式创建包装对象,和原始值相等但不全等。
10、对象和数组的比较并非值的比较,即使包含同样的属性和相同的值,它们也不相等。对象的值都是引用,对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。
11、声明提前:JS函数里声明的所有变量(但不涉及赋值)都被提前至函数体的顶部。
12、通过var声明的变量是不可配置的。