为什么当console.log()声明为true时,if语句声称它为false

时间:2018-09-26 20:54:13

标签: javascript json

此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>

1 个答案:

答案 0 :(得分:0)

JSON.stringify(Array1) == "[0, 0, 0]"

第一次单击JSON.stringify(Array4) == undefined,因此条件为假,然后进入else块。 Array3 != nullArray2 != 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块。这次您分配Array4Array3Array2。现在JSON.stringify(Array4) == "[0, 0, 0]",所以console.log(JSON.stringify(Array4) == (JSON.stringify(Array1)));显示true

下次单击时,第一个条件为true,您将进入if块。对于以后的所有点击,此操作都会继续。

问题是您在更改Array4的值后 记录了比较的结果。因此,您无需打印用于决定为此点击进入if还是else分支的同一内容。您正在打印将用于下一个单击的内容。