淡淡烟草味2017-06-12 09:25:43
由於在 ES6 之前就是這樣的答案,所以本答案從 ES5 中得到。
答案來源:ECMAScript5.1 11.4.6
一元 +
操作將其操作值轉換為數字,別問為什麼,規範上定義的。
答案來源:ECMAScript5.1 11.6.1
加法操作的步驟:
將左右兩值先轉換為元類型(如字串、數字);例如布林會轉為數字,物件通常情況轉為字串等;
加起來
若左值或右值轉換後的值任一為字串,則將兩邊的值都轉為字串作拼接運算;
否則,將左值和右值都轉為數字,然後對數字作加法操作;(如布爾型轉換元類型就不是字符串,而仍然是布爾,所以在這裡判斷走該分支,則將布爾轉為數字1 或0)
回傳結果。
阿神2017-06-12 09:25:43
javascript
是弱型別語言,這是一個原因。再有,如果 +
和數字放在一起,被認為是數字的正數,例如 var a = +11
等同於 var a = 11
。這樣,而 +
只有在字串拼接時才會作為拼接的運算子。而 + '11'
就不算是拼接字串,因為根本沒有拼接字串。所以 js
會將 '11'
隱性的轉換為 11
。
我也是 js
的初學者。這是我的理解。如果不對的話歡迎大神指正。
仅有的幸福2017-06-12 09:25:43
+'11' -----> 一元運算子
The unary + operator converts its operand to Number type.
1+'11' ----> 加法運算子
如果其中一個運算元為字串類型,那麼轉換另外一個運算元為字串,並傳回兩個字串 聯結的結果。
漂亮男人2017-06-12 09:25:43
+'11'
的 +
是正負的正,相當於 Number('11')
1 + '11'
是加減的加,調用了內部的 toPrimitive
方法比較,其中一方是字符串的時候會嘗試調用另一方的 toString
方法