版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
强制类型转换
常见强制转换主要是Number,Boolean,String这三个函数
1.Boolean()函数
只有这五种情况是false
,其它情况都为true
- undefined
- null
- -0或+0
- NaN
- ‘’(空字符串)
至于null是“对象”Boolean却返回false的,可以看这里
2.Number()函数
下面分成两种情况讨论,一种是参数是原始类型的值,另一种是参数是对象。
(1)原始类型值
原始类型值的转换规则如下。
// 数值:转换后还是原来的值
Number(324) // 324
// 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324
// 字符串:如果不可以被解析为数值,返回 NaN
Number('324abc') // NaN
// 空字符串转为0
Number('') // 0
// 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0
// undefined:转成 NaN
Number(undefined) // NaN
// null:转成0
Number(null) // 0
(2)对象
简单的规则是,Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组或者空数组。
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
Number([]) // 0
3.toString()和String()的区别:
两个函数都可以进行强制类型转换,只有String()可以把参数里的所有传值都转换为String类型,而toString()在转换null和undefined时会报错。
var a = null;
var b = a.toString(); // 发生错误
var c = String(a); // c = null
隐式类型转换
- 不同类型的数据互相运算。
123 + 'abc' // "123abc" 自动转换为String
- 第二种情况,对非布尔值类型的数据求布尔值。
if ('abc') { // 根据Boolean规则,对‘abc’隐式转换
console.log('hello')
}
3.除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。
'5' - '2' // 3
'5' * '2' // 10
true - 1 // 0
false - 1 // -1
'1' - 1 // 0
'5' * [] // 0
false / '5' // 0
'abc' - 1 // NaN
null + 1 // 1
undefined + 1 // NaN
+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0
参考:
https://javascript.ruanyifeng.com/grammar/conversion.html
https://www.w3school.com.cn/js/pro_js_typeconversion.asp