22

我正在尝试通过以下方式(仅举例)检查 TypeScript 中是否存在数组索引:

var someArray = [];

// Fill the array with data

if ("index" in someArray) {
   // Do something
}

但是,我收到以下编译错误:

in 运算符要求左操作数为 Any 类型或 String 原始类型,右操作数为 Any 类型或对象类型

有谁知道这是为什么?据我所知,我正在尝试做的事情对 JS 来说是完全合法的。

谢谢。

4

4 回答 4

33

正如评论所指出的,您正在混合数组和对象。数组可以通过数字索引访问,而对象可以通过字符串键访问。例子:

var someObject = {"someKey":"Some value in object"};

if ("someKey" in someObject) {
    //do stuff with someObject["someKey"]
}

var someArray = ["Some entry in array"];

if (someArray.indexOf("Some entry in array") > -1) {
    //do stuff with array
}
于 2013-03-31T20:52:24.230 回答
11

jsFiddle 演示

像这样使用hasOwnProperty

var a = [];
if( a.hasOwnProperty("index") ){
 /* do something */  
}
于 2013-03-31T20:51:32.607 回答
2

您还可以使用 findindex 方法:

var someArray = [];

if( someArray.findIndex(x => x === "index") >= 0) {
    // foud someArray element equals to "index"
}
于 2017-09-01T15:46:20.147 回答
1

一行验证。最简单的方法。

if(!!currentData[index]){
  // do something
}

输出

var testArray = ["a","b","c"]

testArray[5]; //output => undefined
testArray[1]; //output => "b"

!!testArray[5]; //output => false
!!testArray[1]; //output => true
于 2021-08-01T13:35:16.583 回答