为什么下面的JavaScript测试显示元素不属于数组
Why does the following JavaScript test show the element as not belonging to the array?
代码非常简单,我希望为true,但它返回false
var markets = ["AB", "CD"];
console.log("AB" in markets);
我想你指的是if (markets.indexOf('AB') !== -1)
。in
本质上检查测试是否是对象的属性,而不是数组中是否包含元素。
有关更多信息,请参阅Array.indexOf
与in operator
。
因为in
查找的是属性名称,而不是值。您的属性名称是数组索引。
来自in
运算符上的MDN页面:
如果指定的属性在指定的对象中,in运算符将返回true。
prop
表示属性名称或数组索引的字符串或数字表达式
注意属性名称或数组索引。in
运算符不搜索特性值,而是搜索特性名称。在这种情况下,属性名称为0
和1
,因此0 in markets
将返回true。
您应该在支持indexOf
的浏览器中使用它,并在不支持的浏览器中填充它。
因为in
用于对象,而不是数组。如果你想可靠地做到这一点,你必须搜索数组中的每个元素:
for( var i=0, l=markets.length; i<l; i++ ){
if( markets[i] === 'AB' ){
// do something
}
}
以下内容将起作用,这就是您的想法:
var markets = { AB: 1, CD: 1 };
console.log( "AB" in markets );
In仅在使用对象而非数组时有效。因此,这将起作用:
var markets = {
AB: 'AB',
CD: 'CD'
};
'AB' in markets; // true
如前所述,in
在这种情况下对您没有帮助。我想你必须写一个搜索函数。这里有一个:
function inArray(ArrObj, Search){
var exists = false;
for (var i = 0; i < ArrObj.length; i++){
if (ArrObj[i] == Search){
return true;
var exists = true;
break;
}
else if ((i == (ArrObj.length - 1)) && (!exists)){
if (ArrObj[i] != Search){
return false;
}
}
}
}
我想你想要这样的东西,console.log(markets[0]);
相关文章:
- javascript来显示元素属性
- 使用JavaScript或jQuery隐藏和显示元素
- 如何在Angular JS中滚动显示元素
- 如何在使用jQuery应用display:none后正确显示元素
- 仅使用Javascript隐藏/显示元素,而不会弄乱DOM
- jQuery单击并显示元素列表
- 键盘没有在Android和BlackBerry中显示元素焦点
- 在CSS转换期间显示元素的大小值
- 当我们关注jQuery时,只显示元素
- 包含方法和突出显示元素的问题
- JS/JQuery隐藏元素,更改文本,显示元素
- 如何显示元素的一部分,并在单击时切换到所有元素
- 在隐藏元素中显示元素
- 当PROTRACTOR元素后面有元素时,我怎么能知道当前的显示元素
- 在mouseover上显示元素在mouseleave上隐藏
- jquery显示元素是否具有类和特定值的内容
- 不能在复选框旁边显示元素
- 动态显示元素上的JavaScript触摸端;不要开火
- 点击JQuery/HTML5显示元素的索引/位置
- AngularJS:如何默认显示元素,并在按下按钮时切换