簡體   English   中英

為什么JS中的true =='true'語句返回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)NumberType(y)String ,則返回比較結果x == ToNumber(y)

所以現在它正在做1 == ToNumber('true') ,即1 == NaN ,當然這是false

==運算符使用ECMAScript的抽象相等算法 ,這非常復雜。 它的確切行為取決於所涉及的每個參數的類型,每個步驟通常涉及另一個調用另一個ECMAScript函數。

if(condition)語句使用ECMAScript的ToBooleancondition轉換為布爾值,該ToBoolean足夠簡單,可以在單個表中表示。 正如您在規范中看到的,如果它具有非零長度,則任何字符串都是真實的(根據ToBoolean )。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM