javascript - "in"运算符如何处理非字符串键?

标签 javascript operators in-operator

当我在 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/

相关文章:

javascript - 根据结果​​项的类别类型通过 Javascript 隐藏和显示字段

javascript - iframe 未在 webview android 中加载

javascript - "=="的对象相等性的标准定义是什么?

c++ - 不匹配 'operator+='(操作数类型为 'std::basic_ostream<char>' 和 'int')

javascript - 在不离开页面的情况下更改按钮的颜色

JavaScript。循环遍历 div 的子集

javascript - 减少很多 ||一个语句的运算符

php - 如何将 php 数组与 sql IN 运算符一起使用?

SQL In 子句多列

r - 在 R 中的 select 操作符中使用 %in%