JavaScript隐式类型转换小结

2018-02-01  本文已影响0人  skylinety

本文首发于我的个人网站http://blog.skyline.ink,欢迎各位大大访问.
作者水平有限,文章仅供参考,不对的地方希望各位及时指正,共同进步,不胜感激

转换规则

隐式转换为布尔值

如表
数据类型 转化成true 转化成false
String 非空字符 ""(空字符)
Number 非零 0与NaN
Object 非Null对象 null
undefined undefined

(注:调用Boolean()方法得到结果相同)


对象隐式转换规则

对象隐式转换成字符串或数字
0E0B74FDA0F7561D3AF96126F84DD4B3.png-content
不同对象调用toString()得到的结果
对象 调用toString()
普通对象 "[object Object]"
数组arr arr.join()
函数类 定义函数的代码
日期类 可读日期
正则对象 正则对象字面量的字符
不同对象调用valueOf()得到的结果

其他隐式转换规则

转化成字符串 转化成数字 转化成布尔值
undefined "undefined" NaN false
null "null" 0 false
NaN "NaN" NaN false
[](空数组) "" 0 true
""(空字符串) "" 0 false

开始转换

加号

表达式中有字符串
2 + "3"; // "23"
1 + 2 + "3"; // "33"
true + 2 + "3"; // "33"
1 + "2" + 3; // "123"

"2" + true; //"2true"

"2" + undefined; //"2undefined"
"2" + NaN //"2NaN"
'23' + {'a': 1} //"23[object Object]"

'23' + [1,3,{}, null, undefined, '', '2'] // "231,3,[object Object],,,,2"
[1,3,{}, null, undefined, '', '2'].toString() //"1,3,[object Object],,,,2"
23 + "1,3,[object Object],,,,2" //"231,3,[object Object],,,,2"
表达式中没有字符串
1 + [] //"1"
1 + [1] //"11"
1 + {a:'a'} //"1[object Object]"
null + null //0
true + {a:'a'} //"true[object Object]"
typeof NaN //"number"
null + undefined //NaN
1 + undefined //NaN
+ '3'      // 数字3

乘,除,取余,减

1 - '5' //-4
1 - [2, 2] //NaN
1 - {a:1} //NaN
1- undefined //NaN
1 - [] //1
1 - [2, 2] //NaN
1 - null //1

比较运算符部分 > < >= <= ==

var x = NaN;
x === NaN; // false

undefined == "undefined" // false
null == "null" // false
null == 0 // false
null == false // false
undefined == 0 // false
undefined == false // false

参考资料

《JavaScript高级程序设计》

上一篇下一篇

猜你喜欢

热点阅读