奇怪的JavaScript表达

时间:2014-10-30 13:23:31

标签: javascript

有时,在阅读其他人编写的代码时,我遇到了一些我不理解的代码行,例如:

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

第二行的含义究竟是什么?为什么缩写为这样?

3 个答案:

答案 0 :(得分:3)

它的简写为"如果acceptBtn不是" falsy",则将其disabled属性设置为false &#34 ;.

即:

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

答案 1 :(得分:3)

这是一种奇怪的语法,但它是:

的简写
if(acceptBtn)
    acceptBtn.disabled = false;

我个人从不使用它,但是......可读性差。

答案 2 :(得分:2)

第二行利用了Javascript中的布尔操作短路这一事实,也就是说,如果第一部分评估为假,则第二部分永远不会执行。

它还利用了javascript可以在布尔表达式中使用truthy / falsey值的事实。

因此,第二行说,如果acceptBtn为假(可能:null或未定义),则不再进一步,否则将disabled属性设置为false。

它会阻止javascript运行到相当于null引用的异常。