1

我有一个简单的检查来查看一组特定的键是否是一个数组,如果不是创建它,但由于某种原因 if 语句返回错误,这就是我想要做的:

//test data
var i = 0;
var map = new Array(); 
var Data[i]['x'] = 6;
var Data[i]['y'] = 7;

if(!map[Data[i]['x']] instanceof Array){
   map[Data[i]['x']] = new Array();
}

if(!map[Data[i]['x']][Data[i]['y']] instanceof Array){ //error on this line
   map[Data[i]['x']][Data[i]['y']] = new Array();
}

错误是:

Uncaught TypeError: Cannot read property '6' of undefined

此错误发生在第二个 IF 语句上。我在这里犯了什么错误?

4

1 回答 1

5

在第一个if声明中:

if(!map[Data[i]['x']] instanceof Array)

被解析为:

if((!map[Data[i]['x']]) instanceof Array)

在那一点上,map[6]未定义,所以!map[6]true,并且true不是的实例Array。所以它不会将其设置为new Array().

将其更改为:

if (!(map[Data[i]['x']] instanceof Array))
于 2012-12-29T02:49:55.467 回答