[英]How safe is to assume, when creating an object, that non-string keys will be converted to strings using toString()?
[英]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
它們似乎是不同的背景。
這些檢查鍵,其中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.