簡體   English   中英

“in”運算符如何使用非字符串鍵?

[英]How does the “in” operator work with non-string keys?

當我使用in運營商在JavaScript中,我發現一些奇怪的事情。 似乎in使用與==相似但不相同的規則。 以下是一些測試:

var obj = {1: 'a', 3: 'b'};
1 in obj     //=> true
'1' in obj   //=> true
[1] in obj   //=> true
true in obj  //=> false

因為1 == '1' == [1] == true ,所以似乎操作數將被轉換為字符串或整數類型,然后與in運算符進行比較,除了boolean 所以我想我是對的?

你說的沒錯。 它會首先將左操作數轉換為字符串,但請注意,JavaScript中各種數據類型之間的轉換規則比您想象的要復雜得多。

true == "true"   //=> true
true == "1"      //=> true
"true" == "1"    //=> false

精確的規則相當復雜* ,但重要的是要記住,當布爾值直接轉換為字符串時,結果如下:

true.toString()  //=> "true"
false.toString() //=> "false"

所以這正是您應該期望的行為,例如:

var obj = { "true": "a", "false": "b" };
true in obj      //=> true
false in obj     //=> true
1 in obj         //=> false

*請參閱我在JavaScript比較中使用哪個等於運算符(== vs ===)?

它們似乎是不同的背景。

這些檢查鍵,其中true不是鍵。

1 in obj     //=> true
'1' in obj   //=> true
[1] in obj   //=> true
true in obj  //=> false

1 =='1'== [1] == true

這將檢查位值為1,其中1為真。

0 == false應為true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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