javascript 类型隐式转换

佐手、 提交于 2019-11-30 08:16:29

本文转自lifeleanote博客: http://leanote.com/blog/view/5357c38e1a91087246000001

+ 什么时候转成数字, 什么时候转成字符串?

  • +单目 转成数字

  • +双目 转成字符串(除非是数字+数字=数字)

当运算符“+”两边一个是数字类型,一个是字符串类型时,js引擎规定进行字符串连接运算而非算术加运算

1 + "a" == "1a"

但是:

# 单独一个+, 使数组转成数字, 也可以使字符串转成数字
+[] == 0
+[1] == 1
+[1, 2] => NAN
+"1" == 1

# 双目+运算, 都转成字符串操作!!!
1+[] == "1"
1+[2,3] == "12,3"

# 一步步转
1+1+"a" == "2a"

*, - 都转成数字


对象转换

所有对象转成boolean都是true!!! 包括[]和{}

对象转字符串

  1. 先调用toString(), 如果返回字符串或原始值则转成字符串

  2. else 调用valueOf()转成字符串

对象转数字

  1. 先调用valueOf(), 如果返回原始值, 则转成数字

  2. else 调用valueOf()

注意

+[] == 0
+{} => NAN // 因为object调用toString()方法得到"[object Object]"

要记住: +双目 转成字符串(除非是数字+数字=数字)

[]+{} == "[object Object]" 
""+{} == "[object Object]"

{}+"" == 0 // 相当于+"", 会忽略{}
{}+0 == 0 // 相当于+0
0+{} == "0[object Object]" // 转成字符串!!

{}+{} == +{} => NAN

JavaScript 把第一个 {} 解释成了一个空的代码块(code block)并忽略了它

参考

http://justjavac.com/javascript/2012/12/20/object-plus-object.html

http://justjavac.com/javascript/2012/05/24/can-you-explain-why-10.html 

http://stackoverflow.com/questions/7202157/why-is-10  Why is ++[[]][+[]]+[+[]] = “10”?

http://www.ituring.com.cn/article/53351


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!