![](/img/trans.png)
[英]Why does lodash `_.all([true, true, true], true);` return `false`?
[英]Why does true == 'true' statement in JS return false?
問題在標題中。 我剛嘗試在Chrome控制台中運行下一個語句並且對我來說很奇怪(對我來說)結果:
true == 'true' // returns false
'true' == true // returns false
為什么會這樣? 為什么不在那里進行類型轉換,但在下一個聲明中有效?
if ('true') true // returns true
因為它們不代表同樣可轉換的類型/值。 ==
使用的轉換比if ('true')
使用的簡單toBoolean
轉換復雜得多。
所以鑒於此代碼為true == 'true'
,它會發現:
“如果
Type(x)
是Boolean
,則返回比較結果ToNumber(x) == y
。”
所以你看它開始成為ToNumber(true) == 'true'
,這是1 == 'true'
,然后再次嘗試,它現在發現:
如果
Type(x)
為Number
且Type(y)
為String
,則返回比較結果x == ToNumber(y)
。
所以現在它正在做1 == ToNumber('true')
,即1 == NaN
,當然這是false
。
true =布爾類型
'true'=字符串類型
表達式“if('true')”以與if('foo')或任何其他字符串相同的方式將'true'(字符串)計算為true(boolean)。
非空字符串將返回true:
if ('0') true; // true
if ('false') true; // true
if ('anything') true; // true
空字符串將返回undefined,因此是假的 :
if ('') true; // not true
在比較類型時,JavaScript會嘗試為您做一些魔術:
if (1 == "1") true; // true
但是在將字符串轉換為布爾值時失敗:
if(true == "true") true; // not true
true是布爾值'true'是字符串。
您正在比較不同的數據類型。 看這里:http://w3schools.com/js/js_datatypes.asp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.