此if语句if(JSON.stringify(Array4) == (JSON.stringify(Array1)) || suicidal){}
不能按我的预期工作。
变量Suicidal正常工作时,这种情况:
JSON.stringify(Array4) == (JSON.stringify(Array1))
不是;
console.log(JSON.stringify(Array4) == (JSON.stringify(Array1)))
说的是真的。
Array4源自Array1,并且已通过
ArrayX = JSON.parse(JSON.stringify(Array1));
3次。
这也是对Array1进行的唯一修改以获取Array4。
为什么只对console.log()
说“真”?
这是一个片段。
var suicidal = false;
var Array1 = [0, 0, 0];
var Array2;
var Array3;
var Array4;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
}
function mouseClicked() {
if ((JSON.stringify(Array4) == (JSON.stringify(Array1))) || suicidal) { // does not work (suicidal does work)
line(0, 0, width, height);
} else {
if (Array3 != null) {
Array4 = JSON.parse(JSON.stringify(Array3));
}
if (Array2 != null) {
Array3 = JSON.parse(JSON.stringify(Array2));
}
Array2 = JSON.parse(JSON.stringify(Array1));
console.log(JSON.stringify(Array4) == (JSON.stringify(Array1)));
}
}
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.2/p5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.2/addons/p5.dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.2/addons/p5.sound.min.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="utf-8" />
</head>
<body>
<script src="sketch.js"></script>
</body>
</html>
答案 0 :(得分:0)
JSON.stringify(Array1) == "[0, 0, 0]"
。
第一次单击JSON.stringify(Array4) == undefined
,因此条件为假,然后进入else
块。 Array3 != null
和Array2 != null
均为假,因此这些if
块都不执行。然后它执行Array2 = JSON.parse(JSON.stringify(Array1))
,因此现在设置了Array2
。然后执行console.log(JSON.stringify(Array4) == (JSON.stringify(Array1)));
,显示false
。
第二次单击时,Array4
并未更改,因此第一个if
再次失败,因此进入了else
块。 Array3 != null
为假,因此也将跳过if
。但是Array2 != null
是正确的,因此您要分配Array3
。然后,您再次分配Array2
。然后执行console.log(JSON.stringify(Array4) == (JSON.stringify(Array1)));
,它再次显示false
。
第三次单击时,第一个条件仍然为假,因此您再次进入else
块。这次您分配Array4
,Array3
和Array2
。现在JSON.stringify(Array4) == "[0, 0, 0]"
,所以console.log(JSON.stringify(Array4) == (JSON.stringify(Array1)));
显示true
。
下次单击时,第一个条件为true,您将进入if
块。对于以后的所有点击,此操作都会继续。
问题是您在更改Array4
的值后 记录了比较的结果。因此,您无需打印用于决定为此点击进入if
还是else
分支的同一内容。您正在打印将用于下一个单击的内容。