隐式转换
-
数据类型
- 基本数据类型: undefined string boolean null number symbol(es6新加)
- 复杂数据类型:object
- typeof返回的7中数据类型: undefined string boolean null number object function
-
数字与其他类型加法
- 字符串 123+ "456" == "123456" 数字转字符串 toString()
- 布尔类型 123+false == false+123 = 123, 123+true==true+123==124 布尔类型转数字0
- null类型 123+null==null+123==123 null转数字0
- undefined类型 123+undefined==Nan undefined转数字NaN
-
字符串与其他类型加法
- 布尔类型 "hello" + false == "hellofalse" , "hello"+true=="hellotrue" 布尔类型转字符串
- 数字类型 "hello"+123=="hello123" 数字类型转字符串
- null类型 "hello"+null=="hellonull" null类型转字符串
- undefined "hello"+undefined=="helloundefined" undefined转字符串
-
null和undefined
- null+undefined == NaN 两者都转数字, null转数字为0, undefined转数字为NaN 任何数字与NaN相加为NaN, 判断是否为NaN不能用==, NaN于自身都不等, 使用isNaN()函数
-
其他类型的运算
- 减法,乘法,除,取余,大于小于等操作都转成Number类型
1-false == true 20-"1" ==19 20 < "40" == true "1">false == true "1abcd">false == false//(因为"1abcd转数字为NaN") "1abcd"<false
- String类型的带有字符的比如: '1a' ,'a1' 转化为 NaN 与undefined 一样
- parseInt, parseFloat和Number转化
- parseInt("123abcd") = 123, 但是Number("123abcd") == NaN(这里应该使用isNaN判断), Number要严格一些,基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。
- parseFloat("1.23a4.56b.78") ==1.23)
-
转换为boolean类型
- false: null, undefined, 0, '', ""(空串),false , NaN
console.log(!!null) console.log(!!undefined) console.log(!!0) console.log(!!"") console.log(!!'') console.log(!!NaN)
- undefined == null 返回true 比较特殊 (null与自身以及undefined等 与其他都不等)
- ** 0 == undefined**, undefined==0 返回false
- ** null == 0**, 0 == null 返回false
- ** null == "0", ** "0" == null 返回false
- ** null == false** 返回false
- ** NaN == undefined, NaN == null ** 返回false
- ** "" == false** 返回true ( 两者都转数字0)
- ** "0" == false ** 返回true, (两者都转数字0)
- ** 0 == false** 返回true (两者都转数字0)
-
Object的基本运算
- obj与其他类型运算的时候, 会调用valueOf方法
- 在调用String(obj)的时候, 会调用toString()方法
- 对象的比较简单来说就是转化成字符串之后再进行比较
0 == []; // true, 0 == [].valueOf(); -> 0 == 0; '0' == []; // false, '0' == [].toString(); -> '0' == ''; 2 == ['2']; // true, 2 == ['2'].valueOf(); -> 2 == '2' -> 2 == 2; '2' == [2]; // true, '2' == [2].toString(); -> '2' =='2'; []+{} // "[object Object]" []+[] // "" 1+[], []+1 // "1" {}+[] //0 这里[]解析成0 {}+1 // 1 1+{} // "1[object Object]" {}+{} // "[object Object, object Object]" /* 简单小结 [] 解析为 "" 或者0 跟数字运算时解析成数字0, 与字符串运算时解析成空串 []+{}, {}=[] {} 在前面就解析成 0 {} 在前面就解析成 "[object Object]" {} 两个一起的话 都解析成为字符串 "[object Object]" */
网友评论