当我在 javascript 中使用 in
运算符时,我发现了一些奇怪的东西。似乎 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
精确的规则相当复杂*,但这里要记住的重要一点是,当 bool 值直接转换为字符串时,结果如下:
true.toString() //=> "true"
false.toString() //=> "false"
所以这正是您应该期望的行为,例如:
var obj = { "true": "a", "false": "b" };
true in obj //=> true
false in obj //=> true
1 in obj //=> false
* 参见 Does it matter which equals operator (== vs ===) I use in JavaScript comparisons?
关于javascript - "in"运算符如何处理非字符串键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23319123/