类型转换
显示类型转换
-
转换为数值类型
-
Number(mix)
-
parseInt(String)
-
parseFolat(String)
-
-
转换为字符串类型
-
toString()
-
String(mix)
-
-
转换为布尔类型
-
Boolean(mix)
-
隐式类型转换
javaScript的数据类型隐式转换主要分为三种情况:
转换为Boolean类型
转换为Number类型
转换为String类型
注:值在 逻辑判断 和 逻辑运算 时会隐式转换为Boolean类型
布尔值类型转换规则
数据值 | 转换后的布尔值 |
---|---|
数字 0 | false |
NaN | false |
空字符串 "" | false |
null | false |
undefined | false |
非!0 数字 | true |
非空字符串!"" | true |
非!null 对象类型 | true |
注意事项:使用new运算符创建的对象隐式转换为boolean类型的值都是true。
连续的两个非操作可以将一个数强制转换为boolean类型
运算符
当加号运算符作为一元运算符运算值时,他会将该值转换为Number类型
'' + // 0 '0' + //0 '10' + //10 'String' + //NaN true + // 1 false + // 0 undefined + // 0 null + // 0 [] + // 0 ![] + // 0 [1] + // 1 [1,2] + // NaN [[1]] + // NaN [[1,2]] + // NaN {} + // NaN function(){}; //NaN +'' + // 0
当加号运算符作为二元运算符的操作值时,他会根据两边值类型进行数据类型隐式转换。
首先,当引用对象类型的值进行二元加号运算符运算时,会涉及到转换为原始数据类型的问题。事实上,当一个对象执行例如加法操作的时候,如果他是原始类型,那么就不需要转换,否则,将遵循一下规则:
-
调用实例的
valueOf()
方法,如果有返回的是基础类型,停止下面的过程,否则继续。 -
调用实例的
toString()
方法,如果有返回的是基础类型,停止下面的过程,否则继续 -
都没返回原始类型,就会报错。
👍注意事项:当{}
+任何值
时,前一个{}
都会被JavaScript解释成空块并忽略他。
”1“ + 1 // ”11“ "1" + "1" // "11" "1" +true // "1true" "1"+NaN // "NaN" "1" +[] // "1" "1"+ {} // "1[object Object]" "1" +function(){} //"1function(){}" "1" + new Boolean() // "1false" 1+NaN // NaN 1+'true' // "1true" 1+ true // 2 1+ undefined // NaN 1+null // 1 1 + [] // "1" 1 +[1,2] // "11,2" 1 + {} // "1[object Object]" 1 + function(){} "1function(){}" 1 + Number() // 1 1 + String() // "1" [] + [] //"" {} + {} // ”[object Object][object Object]“ {} + [] // 0 {a:0} + 1 // 1 [] + {} // ”[object Object] “
相等运算符
相等运算符==
会对操作值进行隐式转换后进行比较
-
如果其中一个操作值为布尔值,则在比较之前先将其转换为数值
-
如果其中一个操作值为字符串,另一个操作值为数值,则通过
Number()
函数将字符串转换为数字 -
如果其中一个操作值是对象,另一个不是,则调用对象的
valueOf()
方法,得到的结果按照前面的规则进行比较 -
null
与undefined
时相等的 -
如果操作值为
NaN
,则返回false
-
如果两个操作值是对象,则比较他们是不是指向同一个对象
'1' == true // true '1' == 1 //true '1' == {}; //false '1' == []; // false
来源:网址