希望这是一个简单的问题。
为什么检查多维数组中是否存在键:
a = new Array(Array());
a[0][0]='1';
a[0][1]='2';
if(a[1][2] == undefined){
alert("sorry, that key doesn't exist");
} else {alert('good, your key exists');
}
似乎一般不起作用,但是当我检查由a[0][x]
“定义”的第一个索引(在这种情况下为“0”)时它起作用。例如,当我要求a[0][2]
(未定义)时,它会显示第一个警报。但是,当我要求a[1][0]
时,我得到:
“未捕获的TypeError:无法读取未定义的属性'0'”
我该如何解决这个问题?
由于
答案 0 :(得分:8)
首先检查第一个维度是否存在,然后检查第二个维度中的密钥是否存在
如果第一个测试返回false
,则逻辑将返回false
,如果第一个测试返回true
,则逻辑将仅返回 。
if(a[1] == undefined && a[1][2] == undefined)
答案 1 :(得分:2)
使用前三个分配,您的阵列实际上如下所示:
a = [['1','2']]
阅读a[0][2]
只会返回undefined
,因为a[0]
存在,但其属性'0'
未定义。
但是尝试阅读a[1][0]
会引发 TypeError ,因为a[1]
已经是undefined
且不是对象,因此没有任何属性。这也是您的错误消息所说的内容:
无法读取未定义的属性“0”。
首先检查a[1]
,然后使用a[1][0]
运算符检查typeof
,即可解决此问题:
if (typeof a[1] !== 'undefined' && typeof a[1][0] !== 'undefined')
答案 2 :(得分:1)
a = Array(Array())
没有定义多维数组。它只是定义了一个带有一个项目的数组,恰好是另一个(空)数组。 javascript中没有内置的多维数组,因此您必须手动处理更多内容。
答案 3 :(得分:1)
您只需要进一步限定条件。由于数组的[1]索引未定义,因此无法测试其中的值。
if(a[1] === undefined || a[1][2] === undefined)
答案 4 :(得分:0)
var a = Array(Array());
a[0][0]='1';
a[0][1]='2';
if(a[1] === undefined || a[1][2] === undefined) {
alert("sorry, that key doesn't exist");
} else {
alert('good, your key exists');
}
答案 5 :(得分:0)
在受支持的平台上,我们可以这样做:
if(a[3]?.[3]){
// Do something
}