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