2016-11-26 42 views
-2

當我們比較10 ==「10」JavaScript給出的輸出爲真。這是否意味着第一個操作數10(Number)被轉換爲「10」(String),反之亦然?如何在JavaScript中使用10 ==「10」的情況下工作==?

+2

最後一句應該是個問題嗎? – melpomene

+1

使用==運算符僅檢查兩個值是否相等。它完全無視這種類型。===運算符檢查類型和值使它成爲一個更嚴格的運算符 – Jackthomson

+0

@TheSETJ我猜它不是完全重複的,因爲OP想知道'=='如何工作 – Rajesh

回答

3

在此document10 == "10"使用表意味着代碼表現爲A === ToNumber(B)即字符串被轉換爲數字

0

做的雙等於嘗試是,將其轉換兩個操作數常見的數據類型。它會嘗試將這兩個值轉換爲整數。如果其中一個被轉換爲int,則兩者都將被轉換並且輸出將被返回。如果兩者均失敗,則會執行字符串比較。

console.log(10 == "10") 
 
console.log(true == "true") 
 
console.log({} == '[object Object]')

原因第二返回false是因爲parseInt(true)將返回1 parseInt('true')將返回NaN

你可以閱讀以下鏈接算法:The Abstract Equality Comparison Algorithm

1

==指檢查爲值。

===表示檢查值以及類型。

所以當比較10 =='10'時,JavaScript引擎只檢查值,因此true

10 === '10' will yeild false。 閱讀mozilla的equality comparison瞭解更多信息。

2

==運營商將在之後進行任何必要的類型轉換後進行比較===運營商不會做轉換,所以如果兩個值不是相同的類型===將簡單地返回false不管。在我們的案例10 == "10"類型轉換後,比較的兩邊都是相等的,所以它返回true

+0

*經過類型轉換*轉換後的哪一種類型? – 2016-11-26 12:04:30

0

我不知道這是否完全是一個問題,但如果是的話;首先我需要說你的觀點是正確的,一個隱式類型轉換發生在這裏,因爲==檢查不是相同的平等,第二你可能會發現有用這些鏈接:

JavaScript comparison operators: Identity vs. Equality

Which equals operator (== vs ===) should be used in JavaScript comparisons?

JavaScript - === vs == operators performance

Equality comparisons and sameness

更新:我做了正確的我對CON錯誤版本和演員,感謝@melpomene。

相關問題