JavaScript 隱式轉換小例子

壹題git

第 116 題:輸出如下代碼運行結果
1 + '1'

2 * '2'

[1, 2] + [2, 1]

'a' + + 'b'
複製代碼

1 + '1'

加法運算符的做用是數值求和或者字符串拼接。只要有一個操做數是字符串,即爲字符串拼接。github

1 + '1' // '11'
複製代碼

2 * '2'

乘法運算符的結果是操做數的乘積。故對操做數進行 ToNumber 類型轉換。spa

2 * '2' // 4
複製代碼

[1, 2] + [2, 1]

兩個對象的值進行 + 運算符,確定要先進行隱式類型轉換爲原始類型才能進行計算。code

  1. 進行 ToPrimitive 轉換,因爲沒有指定 PreferredType 類型,默認會進行 ToPrimitive(input, Number) 運算。
  2. 因此會執行 valueOf 方法,返回 '1, 2',是原始值。
  3. 同理,上述代碼簡化爲 '1, 2' + '2, 1'。
[1, 2] + [2, 1] // '1, 22, 1'
複製代碼

'a' + + 'b'

一元正號運算符位於其操做數前面,計算其操做數的數值,若是操做數不是一個數值,會嘗試將其轉換成一個數值。 儘管一元負號也能轉換非數值類型,可是一元正號是轉換其餘對象到數值的最快方法,也是最推薦的作法,由於它不會對數值執行任何多餘操做。它能夠將字符串轉換成整數和浮點數形式,也能夠轉換非字符串值 true,false 和 null。小數和十六進制格式字符串也能夠轉換成數值。負數形式字符串也能夠轉換成數值(對於十六進制不適用)。若是它不能解析一個值,則計算結果爲 NaN。對象

'a' + (+ 'b') // 'aNaN'
複製代碼
相關文章
相關標籤/搜索