目录
①.数据类型转换函数
Boolean()
- 为false的特殊值有: false undefined null NaN 0 -0 '' 空 8种情况
- 为true的特殊值:[] {} 'false'
Number()
- 返回0的有: 空 ; 空字符串; 空数组; null; false
- 返回NaN的有: {} undefined
String()
- 和toString()类似 都可以将对象转为字符串,但toString()无法转换null undefined
- String(null) == null String(undefined) == undefined
toString()
-
number array boolean functionj均覆盖了Object的toString()方法
- number.toString(n) 将数字转为字符串 可转为指定进制的字符串 默认为十进制
- boolean.toString() 返回指定布尔对象的字符串
- arr.toString()返回一个字符串 每个元素用逗号隔开
- Function.prototype.toString() | fn.toString() 返回一个表示当前函数源代码的字符串
- Object.prototype.toString()
- 检测数据类型
Object.prototype.toString.call(new Date); // [object Date]
Object.prototype.toString.call(new String); // [object String]
Object.prototype.toString.call(Math); // [object Math]
Object.prototype.toString.call(undefined); // [object Undefined]
Object.prototype.toString.call(null); // [object Null]
parseInt(str,n)
- 将字符串转为整数
- 可以转为z指定进制的整数
parseFloat(str)
- 将字符串转为浮点数
②.比较运算
!!a if(a)
相当于对数据进行了布尔转换Boolean(a)
!a
等同于对数据进行了布尔运算后取反
=== 和 !==
不进行转换直接比较,两者数据类型不同就不相等
a == b
对象与字符串进行比较:对象先转为字符串再进行对比
对象与Boolean值进行对比 对象转为字符串转为数值,Boolean转为数值 再进行对比
字符串与布尔值对比 两者均转为数值 再进行对比
null == undefined // true
NaN == NaN // false
[] == false// true 两边都转为number都为0
![] == false// true 左边取[]布尔值的反值 两边都为false
undefined == 0 //false
null == 0 //false
+操作符
- 有字符串存在 其他的都转为字符串 调用String()
'1'+undefined //'1undefined'
'1'+null //'1null'
'1'+{} //'1[object Object]'
'1' + NaN //'1NaN'
'1' + [] //'1'
- 数字+boolean/undefined/null 调用Number()
1+false == 1
1+true == 2
1+null == 1
1+undefined ---NaN
NaN != NaN
- 数字+对象 对象转为字符串再进行拼接 调用String()
1+[] //'1'
1+[1,2,3]//"11,2,3"
1+{} //'1[object Object]'
1+{a:1}//"1[object Object]"
&& 和 || 转换规则
当有一个值不是boolean值的情况下,逻辑与(&&)和逻辑非(||)不一定返回布尔值
- && (逻辑与)
- 若第一个操作数是null、undefined、NaN,则返回null、undefined、NaN
- 当第一个操作数是对象,或者两个操作数都是对象,则返回第二个操作数
- 若第二个操作数是对象,则在第一个操作数返回true的时候才返回第二个对象
- 如果第一个操作数求值结果为false,则不会对第二个操作数进行求值
- || 逻辑或
- 若两个操作数都是null、undefined、NaN,则返回null、undefined、NaN
- 当第一个操作数是对象,或者两个操作数都是对象,则返回第一个操作数
- 若第一个操作数求值结果为false,则返回第二个操作数
- 若第一个操作数求值结果为true,则不会对第二个操作数进行求值