【发布时间】:2014-12-26 13:32:47
【问题描述】:
有时候,在阅读别人写的代码时,会遇到一行我看不懂的代码,比如这行:
var acceptBtn = document.getElementById('saveBtn');
(acceptBtn) && (acceptBtn.disabled = false);
第二行到底是什么意思,为什么会这样缩写?
【问题讨论】:
标签: javascript
有时候,在阅读别人写的代码时,会遇到一行我看不懂的代码,比如这行:
var acceptBtn = document.getElementById('saveBtn');
(acceptBtn) && (acceptBtn.disabled = false);
第二行到底是什么意思,为什么会这样缩写?
【问题讨论】:
标签: javascript
第二行利用了 Javascript 中的布尔运算短路这一事实,也就是说,如果第一部分评估为 false,那么第二部分永远不会执行。
它还利用了 javascript 可以在布尔表达式中使用真/假值这一事实。
因此,第二行表示,如果 acceptBtn 为假(可能:null 或未定义),则不要继续,否则将 disabled 属性设置为假。
它会停止 javascript 运行,相当于一个空引用异常。
【讨论】:
它是“如果acceptBtn 不是“假”,则将其disabled 属性设置为false”的简写。
即:
if(acceptBtn){
acceptBtn.disabled = false;
}
【讨论】:
null 值,还有任何通过类型强制转换为false 的值。所以0、undefined、""等
这是一个奇怪的语法,但它是以下的简写:
if(acceptBtn)
acceptBtn.disabled = false;
不过,我个人永远不会使用它.. 可读性差。
【讨论】: