【问题标题】:Strange JavaScript Expression [duplicate]奇怪的 JavaScript 表达式 [重复]
【发布时间】:2014-12-26 13:32:47
【问题描述】:

有时候,在阅读别人写的代码时,会遇到一行我看不懂的代码,比如这行:

 var acceptBtn = document.getElementById('saveBtn');
 (acceptBtn) && (acceptBtn.disabled = false);

第二行到底是什么意思,为什么会这样缩写?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    第二行利用了 Javascript 中的布尔运算短路这一事实,也就是说,如果第一部分评估为 false,那么第二部分永远不会执行。

    它还利用了 javascript 可以在布尔表达式中使用真/假值这一事实。

    因此,第二行表示,如果 acceptBtn 为假(可能:null 或未定义),则不要继续,否则将 disabled 属性设置为假。

    它会停止 javascript 运行,相当于一个空引用异常。

    【讨论】:

      【解决方案2】:

      它是“如果acceptBtn 不是“假”,则将其disabled 属性设置为false”的简写。

      即:

      if(acceptBtn){
          acceptBtn.disabled = false;
      }
      

      【讨论】:

      • 不仅仅是null 值,还有任何通过类型强制转换为false 的值。所以0undefined""
      【解决方案3】:

      这是一个奇怪的语法,但它是以下的简写:

      if(acceptBtn)
          acceptBtn.disabled = false;
      

      不过,我个人永远不会使用它.. 可读性差。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-17
        • 2023-03-31
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 2023-03-22
        相关资源
        最近更新 更多