<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
var box1=[[0,0,0,0],
[0,0,0,0],
[1,1,1,1],
[0,0,0,0]],
box2=[[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0]],
box3=[[0,0,0,0],
[1,1,1,0],
[0,1,0,0],
[0,0,0,0]],
box4=[[0,1,1,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]],
box5=[[0,1,1,0],
[0,0,1,0],
[0,0,1,0],
[0,0,0,0]],
box6=[[0,0,0,0],
[0,1,0,0],
[0,1,1,0],
[0,0,1,0]];
box7=[[0,0,0,0],
[0,0,1,0],
[0,1,1,0],
[0,1,0,0]];
var shape = [box1,box2,box3,box4,box5,box6,box7];
function test(){
var r1 = 0 //Math.floor(Math.random()*7); //随机形状
var r2 = Math.floor(Math.random()*4) + 1; //随机图形
var box = shape[r1].concat([]);//或者box = shape[r1]
console.log(box);
for( var i=0; i<4; i++ ){
for( var j=0; j<4; j++ ){
if( box[i][j] != 0 ){
box[i][j] = box[i][j]*r2;
};
};
};
};
test();
// test();
// test();
</script>
</body>
</html>
[[0,0,0,0],
[0,0,0,0],
[1,1,1,1],
[0,0,0,0]]
但实际上的值为随机的,1变为后文运算中的1-4之间。test函数多调用几次,log查看1没有出现的可能。
以前一直以为log出来的都是实时值,才知道如果log的是对象,后文改变了,之前log的值也会变化。如果想把实时值log出来,可以用JSON.parse(JSON.stringify(obj))方法。
还有值得注意的是,如果log出来的值,已经查看了,后文就算改变了,也不会发生变化。断点log查看,显示为1,后文就算改变了,log出来的也不会改变。如果断点没有查看,log出来的还是最终值。
再就是引用对象中的对象,此时concat是失效的。
原