奇怪的JavaScript表达式
有时,在阅读他人编写的代码时,我会遇到我不理解的代码行,例如:奇怪的JavaScript表达式,javascript,Javascript,有时,在阅读他人编写的代码时,我会遇到我不理解的代码行,例如: var acceptBtn = document.getElementById('saveBtn'); (acceptBtn) && (acceptBtn.disabled = false); 第二行的确切含义是什么?为什么缩写成这样 它是“如果acceptBtn不是“falsy”,则将其disabled属性设置为false”的缩写 即: 这是一种奇怪的语法,但它是: if(acceptBtn) acc
var acceptBtn = document.getElementById('saveBtn');
(acceptBtn) && (acceptBtn.disabled = false);
第二行的确切含义是什么?为什么缩写成这样 它是“如果acceptBtn
不是“falsy”,则将其disabled
属性设置为false
”的缩写
即:
这是一种奇怪的语法,但它是:
if(acceptBtn)
acceptBtn.disabled = false;
但是我个人永远不会用它。。可读性差。第二行利用了Javascript中布尔运算短路的事实,也就是说,如果第一部分的计算结果为false,那么第二部分就永远不会执行 它还利用了javascript可以在布尔表达式中使用truthy/false值这一事实 因此,第二行表示,如果
acceptBtn
为false(可能为null或undefined),则不再继续,否则将disabled
属性设置为false
它会停止javascript运行,使其等同于空引用异常。不仅仅是
null
值,还包括通过类型强制计算为false
的任何内容。所以0
,未定义
,“
,等等
if(acceptBtn)
acceptBtn.disabled = false;