2014-01-28 28 views
1

知道javascript會在需要時自動轉換類型,例如「8」*「3」= 24;但是在比較兩種不同類型的js時,首先要轉換哪種類型。是否有任何類型轉換的優先順序?

讓我給你看一個例子。

enter image description here

這裏的時候,字符串「真」與布爾值true比較,然後其中一人必須轉換爲其他類型。什麼是這裏的優先,將「真正的」字符串轉換爲布爾真正的返回一個布爾對象,或布爾真正轉換爲「真」字符串。

在上面我猜真正的字符串被轉換爲布爾值真正的對象使該語句爲假,所以爲什麼這不是相反的是在類型轉換的優先嗎?

+0

是的。有。這已經回答了很多次。基本上歸結爲:** ==是它自己的魔法**。我在這裏討論它http://stackoverflow.com/questions/20668845/short-circuiting-an-empty-array-in-js-has-an-unexpected-outcome-true/20668885#20668885(從略有不同問題的角度,這就是爲什麼它不是重複;無論如何,請參閱鏈接的參考) – user2864740

+0

您可能想要查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values ,_variables,_and_literals –

+0

@JamesBlack這個文檔實際上並不包括這種情況,因爲「true」*是一個真實的y值(即'[ToBoolean(「true」)]''爲'true'),但「true」== true的表達式是錯誤的。 [==運算符*支持* [ToNumber]轉換](http://es5.github.io/#x11.9.3),它與'[ToBoolean]'不同。 – user2864740

回答

1

參見11.9.3 The Abstract Equality Comparison Algorithm

基本上歸結爲:==是它自己的魔法;如果有的話,它優惠ToNumber轉換。該轉換是等式運算符評估的結果

"true" == true 
"true" == 1  // by rule #7 - ToNumber(true) 
0 == 1   // by rule #5 - ToNumber("true") 
false   // by rule #1c 

ToBoolean操作被簡單地不使用在這種情況下,儘管它是在感實性重要的其它情況 - 例如與邏輯布爾運算符或條件表達式。

+0

令人驚歎的放肆,非常感謝。 – user3242837

+0

我想,其實不是ToBoolean它只是布爾(字符串);顯式轉換 – user3242837

+0

new Boolean(string);返回一個正確的布爾對象,但只是布爾(字符串);在真摯和虛假的情況下返回真假。感謝回覆。 – user3242837