代码非常简单,我希望它是真的,但它会返回false
var markets = ["AB", "CD"];
console.log("AB" in markets);
答案 0 :(得分:3)
我认为你的意思是if (markets.indexOf('AB') !== -1)
。 in
基本上检查测试是否是对象的属性,而不是数组中包含的元素。
有关详细信息,请查看Array.indexOf
与in operator
。
答案 1 :(得分:1)
因为in
查找属性名称,而不是值。您的属性名称是数组索引。
答案 2 :(得分:1)
来自MDN's page on the in
operator:
如果指定的属性在指定的对象中,则in运算符返回true。
prop
表示属性名称或数组索引的字符串或数字表达式
注意属性名称或数组索引。 in
运算符不搜索属性值,而是搜索属性名称。在这种情况下,属性名称为0
和1
,因此0 in markets
将返回true。
您应该在支持它的浏览器中使用indexOf
,并在那些不支持的浏览器中使用{{3}}。
答案 3 :(得分:0)
因为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 );
答案 4 :(得分:0)
仅在使用对象时才起作用,而不是数组。所以这将有效:
var markets = {
AB: 'AB',
CD: 'CD'
};
'AB' in markets; // true
答案 5 :(得分:0)
正如所说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;
}
}
}
}
答案 6 :(得分:-2)
我认为你想要这样的东西,console.log(市场[0]);