内置类型及转换
内置类型
内置类型: 基本类型和对象
基本类型:null、undefined、boolean、number、string、symbol
其中JS数字类型是浮点(IEEE 754)类型,没有整型。NaN也属于Number,且不等于自身
typeof null -> 'object' 一个存在久远的bug
要想获得一个变量的正确类型,可以通过Object.prototype.toString.call(x),通过 [Object Type] 字符串来判断具体类型
类型转换
转Boolean
除了 undefined null false NaN '' 0 -0 其他所有值都转为true,包括所有对象
对象转基本类型
对象在转基本类型时,首先调用 valueOf 再 toString 且这两方法可以被重写
四则运算符
加法: 将值转为原始值 转换为数字 转换为字符串
1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'
// 对于加号需要注意表达式 'a' + + 'b'
// 'aNaN'== 操作符
比较运算 x == y 其中 x和y是值,产生true或者false,这样的比较按如下方式进行:
若type(x)与type(y)相同,则 a. 若 type(x)为undefined,return true b. 若 type(x)为null, return true c. 若 type(x)为number, 则 i. 若 x 为NaN, return false ii. 若 y 为NaN, return false iii. 若x与y为相同数值 return true iv. 若x为 +0 且 y 为 -0 return true v. 若x为 -0 且 y 为 +0 return true d. 若type(x)为string, 则当x和y为完全相同的字符序列(长度相等且相同字符在同位置)时return true,否则返回false e. 若type(x)为boolean,当x和y同为true或者同为false时return true,否则false f. 当x和y为同一引用对象return true, 否则false
若x为null y为undefined return true,
同上,交换后也是true
x为number,y为string,返回 comparison x == toNumber(y)的结果
同上,交换后也是
返回比较 number(x) == y 的结果
若 x为boolean, 返回比较 number(x) == y 的结果
y为boolean, 返回比较 x == toNumber(y) 的结果
若x为string或number,且y为object,返回比较 x == ToPrimitive(y)的结果
若x为object且y为string或number, 返回比较 ToPrimitive(x) == y的结果
返回false
