知道javascript會在需要時自動轉換類型,例如「8」*「3」= 24;但是在比較兩種不同類型的js時,首先要轉換哪種類型。是否有任何類型轉換的優先順序?
讓我給你看一個例子。
這裏的時候,字符串「真」與布爾值true比較,然後其中一人必須轉換爲其他類型。什麼是這裏的優先,將「真正的」字符串轉換爲布爾真正的返回一個布爾對象,或布爾真正轉換爲「真」字符串。
在上面我猜真正的字符串被轉換爲布爾值真正的對象使該語句爲假,所以爲什麼這不是相反的是在類型轉換的優先嗎?
知道javascript會在需要時自動轉換類型,例如「8」*「3」= 24;但是在比較兩種不同類型的js時,首先要轉換哪種類型。是否有任何類型轉換的優先順序?
讓我給你看一個例子。
這裏的時候,字符串「真」與布爾值true比較,然後其中一人必須轉換爲其他類型。什麼是這裏的優先,將「真正的」字符串轉換爲布爾真正的返回一個布爾對象,或布爾真正轉換爲「真」字符串。
在上面我猜真正的字符串被轉換爲布爾值真正的對象使該語句爲假,所以爲什麼這不是相反的是在類型轉換的優先嗎?
參見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操作被簡單地不使用在這種情況下,儘管它是在感實性重要的其它情況 - 例如與邏輯布爾運算符或條件表達式。
令人驚歎的放肆,非常感謝。 – user3242837
我想,其實不是ToBoolean它只是布爾(字符串);顯式轉換 – user3242837
new Boolean(string);返回一個正確的布爾對象,但只是布爾(字符串);在真摯和虛假的情況下返回真假。感謝回覆。 – user3242837
是的。有。這已經回答了很多次。基本上歸結爲:** ==是它自己的魔法**。我在這裏討論它http://stackoverflow.com/questions/20668845/short-circuiting-an-empty-array-in-js-has-an-unexpected-outcome-true/20668885#20668885(從略有不同問題的角度,這就是爲什麼它不是重複;無論如何,請參閱鏈接的參考) – user2864740
您可能想要查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values ,_variables,_and_literals –
@JamesBlack這個文檔實際上並不包括這種情況,因爲「true」*是一個真實的y值(即'[ToBoolean(「true」)]''爲'true'),但「true」== true的表達式是錯誤的。 [==運算符*支持* [ToNumber]轉換](http://es5.github.io/#x11.9.3),它與'[ToBoolean]'不同。 – user2864740