【问题标题】:What's the difference between x=false AND x=!x TO x=false AND x=true?x=false AND x=!x TO x=false AND x=true 有什么区别?
【发布时间】:2018-08-31 17:16:22
【问题描述】:

这个问题是this one 的后续问题。

有什么区别:

let isMenuVisible = false;

burger.addEventListener('click', ()=>{
  isMenuVisible = !isMenuVisible;
  menu.style.display = isMenuVisible ? 'block' : 'none';
});

let isMenuVisible = false;

burger.addEventListener('click', ()=>{
  isMenuVisible = true;
  menu.style.display = isMenuVisible ? 'block' : 'none';
});

我不明白为什么后面的代码会失败;在我看来它们是等价的(因为 false 的否定是 true,不是吗?)。

【问题讨论】:

  • isMenuVisible = true; 将始终将该值设置为 true。 isMenuVisible = !isMenuVisible; 会改变值,如果为假,则现在为真,如果为真,则现在为假;
  • 这就是你的全部代码吗?在添加事件侦听器之前,值可能会被其他人更改。
  • 失败是什么意思
  • 第一次调用监听器的时候是一样的。在第二次调用中,isMenuVisible 将在第一个 sn-p 中设置为 false - 在第二个中它将保持 true

标签: javascript logic operators


【解决方案1】:

首先,在您的 burger.addEventListener 中,isMenuVisible = !isMenuVisible;isMenuVisible = true 不是一回事。

isMenuVisible = !isMenuVisible; 表示isMenuVisible 的值现在可以替代,例如,如果它是true,则设为false,如果是false,则设为true

isMenuVisible=true 表示设置它true isMenuVisible=false 表示设置false

【讨论】:

    【解决方案2】:

    .在第一种情况下,isMenuVisible 为假,所以!isMenuVisible 为真;

    isMenuVisible =!isMenuVisible 将设置 isMenuVisible 的值将在每个 click 事件上更改

    在第二种情况下,不是通过变量分配值true而是直接分配给isMenuVisible,并且该值永远不会toggle

    【讨论】:

      【解决方案3】:
      isMenuVisible = !isMenuVisible:
      

      这就像翻牌。如果我们最初设置isMenuVisible = false。执行上述行一次后,isMenuVisible 将变为!isMenuVisible/true。再次执行后,isMenuVisible 将变为!isMenuVisible/falseisMenuVisible 在每次执行中都会发生变化。

      isMenuVisible = true:
      

      这只是一直将true 分配给isMenuVisible

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        相关资源
        最近更新 更多