javascript-“ in”运算符如何与非字符串键一起使用?

当我在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运算符进行比较之前转换为字符串或整数类型,布尔值除外.所以我想知道我是对的吗?

解决方法:

没错它将首先将左操作数转换为字符串,但是请注意,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

*参见Does it matter which equals operator (== vs ===) I use in JavaScript comparisons?

上一篇:对编程中“脚手架”的理解


下一篇:【PAT】A1113 Integer Set Partition (25 point(s))