javascript 类型隐式转换

原创
2014/04/30 12:00
阅读数 155

本文转自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


展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部