本文转自life的leanote博客: 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!!! 包括[]和{}
对象转字符串
先调用toString(), 如果返回字符串或原始值则转成字符串
else 调用valueOf()转成字符串
对象转数字
先调用valueOf(), 如果返回原始值, 则转成数字
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
来源:oschina
链接:https://my.oschina.net/u/1181435/blog/228777