2014-10-30 48 views
-1

有時,讀別人寫的代碼的時候,我遇到的代碼行,我不明白,比如這一個:奇怪的JavaScript表達

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

究竟什麼是第二行的意義,以及爲什麼它是這樣縮寫的嗎?

回答

3

這是一個奇怪的語法,但它的簡寫:

if(acceptBtn) 
    acceptBtn.disabled = false; 

我個人從來沒有使用它,但..壞可讀性。

3

它是「如果acceptBtn不是」falsy「,則將其設置爲disabled屬性爲false」。

即:

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

不僅僅是'null'值,而是通過類型強制評估爲'false'的任何值。所以'0','undefined','''''等等 – tkone 2014-10-30 13:27:32

2

第二行利用了Javascript短路布爾操作這一事實,也就是說,如果第一部分評估爲false,那麼第二部分不會執行。

它也利用了這個事實,即javascript可以在布爾表達式中使用truthy/falsey值。

因此,第二行說,如果acceptBtn是falsey(可能:null或undefined),則不要再進一步,否則將disabled屬性設置爲false。

它停止運行到相當於空引用異常的JavaScript。