为什么下面的JavaScript测试显示元素不属于数组

Why does the following JavaScript test show the element as not belonging to the array?

本文关键字:显示 元素 不属于 数组 测试 JavaScript 为什么      更新时间:2023-09-26

代码非常简单,我希望为true,但它返回false

var markets = ["AB", "CD"];
console.log("AB" in markets);

我想你指的是if (markets.indexOf('AB') !== -1)in本质上检查测试是否是对象的属性,而不是数组中是否包含元素。

有关更多信息,请参阅Array.indexOfin operator

因为in查找的是属性名称,而不是值。您的属性名称是数组索引。

来自in运算符上的MDN页面:

如果指定的属性在指定的对象中,in运算符将返回true。

prop表示属性名称或数组索引的字符串或数字表达式

注意属性名称或数组索引in运算符不搜索特性值,而是搜索特性名称。在这种情况下,属性名称为01,因此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]);