javascript 类型隐式转换

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

+ 何时转成数字, 何时转成字符串?

  • +单目 转成数字html

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

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

1 + "a" == "1a"

可是:spa

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

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

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

*, - 都转成数字


对象转换

全部对象转成boolean都是true!!! 包括[]和{}code

对象转字符串orm

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

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

对象转数字blog

  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

相关文章
相关标签/搜索