Javascript 检查数组中的值是否已定义
我试图用0和1填充一个数组,如果你把它排列成一个6乘6的网格,就会有随机分散的,彼此直接相邻的数组 例如:Javascript 检查数组中的值是否已定义,javascript,arrays,Javascript,Arrays,我试图用0和1填充一个数组,如果你把它排列成一个6乘6的网格,就会有随机分散的,彼此直接相邻的数组 例如: 001101 111001 001011 001110 111000 为了检查是否有一个潜在的一个旁边,我需要检查数组的4个值。这就是我遇到困难的地方。我已经尝试过实现Stackoverflow上其他问题的解决方案,但我无法让它专门用于此if语句 function initialize(){ tile = new Array(6); first = true; fo
001101
111001
001011
001110
111000 为了检查是否有一个潜在的一个旁边,我需要检查数组的4个值。这就是我遇到困难的地方。我已经尝试过实现Stackoverflow上其他问题的解决方案,但我无法让它专门用于此if语句
function initialize(){
tile = new Array(6);
first = true;
for(i = 0; i < 6; i++){
tile[i] = new Array(6);
for(j = 0; j < 6; j++){
//This is where I'm having difficulty
if(Math.random() < .75 && tile[i + 1][j + 1] != 'undefined' || tile[i - 1][j - 1] != 'undefined' || tile[i - 1][j + 1] != 'undefined' || tile[i + 1][j - 1] != 'undefined' || first){
tile[i][j] = 1;
first = false;
}else{
tile[i][j] = 0;
}
}
}
}
函数初始化(){
瓷砖=新阵列(6);
第一个=正确;
对于(i=0;i<6;i++){
瓦片[i]=新阵列(6);
对于(j=0;j<6;j++){
//这就是我遇到困难的地方
if(Math.random()<.75&&tile[i+1][j+1]!=“未定义”| tile[i-1][j-1]!=“未定义”| tile[i-1][j+1]!=“未定义”| tile[i+1][j-1]!=“未定义”|{
瓷砖[i][j]=1;
第一个=假;
}否则{
瓷砖[i][j]=0;
}
}
}
}
您正在检查是否与字符串“undefined”相等,而不是与未定义的值相等。试一试
tile[i + 1][j + 1] !== undefined
(未定义的周围没有单引号)
此处讨论:您忘记添加
typeof
这是您通常检查未定义项的方式
typeof tile[i - 1][j + 1] === 'undefined'
编辑,根据你的评论,你正在做这样的事情
typeof tile[i - 1][j - 1] !== 'undefined'
并且得到了
未捕获类型错误:无法读取未定义的属性“1”或未捕获类型错误:无法读取未定义的属性“-1”
两件事:你试图访问一个-1的索引似乎总是失败的。也就是说,即使您通过一个错误修复了这个问题,表达式如下
tile[i - 1][j - 1]
如果
tile[i - 1]
它本身是未定义的。所以你必须单独检查。差不多
(typeof tile[i - 1] === 'undefined' || typeof tile[i - 1][j + 1] === 'undefined')
这样,如果
tile[i-1]
未定义,整个表达式将在得到错误之前“短路” 或者,typeof xyz!='未定义的“
(typeof
operator),以防止旧浏览器允许覆盖undefined
。(编辑:见Adam的帖子)上次我研究这个问题时,Adam Rackis的方法是最佳实践。我尝试了if(Math.random()<.75&&typeof tile[I+1][j+1]!='undefined'| typeof tile[I-1][j-1]!='undefined'| typeof tile[I-1][j-1]!='undefined';typeof tile[I+1][j-1]!='undefined';first
,但我仍然得到未捕获的TypeError:无法读取未定义的属性“1”或未捕获的TypeError:无法读取未定义的属性“-1”。