有時,讀別人寫的代碼的時候,我遇到的代碼行,我不明白,比如這一個:奇怪的JavaScript表達
var acceptBtn = document.getElementById('saveBtn');
(acceptBtn) && (acceptBtn.disabled = false);
究竟什麼是第二行的意義,以及爲什麼它是這樣縮寫的嗎?
有時,讀別人寫的代碼的時候,我遇到的代碼行,我不明白,比如這一個:奇怪的JavaScript表達
var acceptBtn = document.getElementById('saveBtn');
(acceptBtn) && (acceptBtn.disabled = false);
究竟什麼是第二行的意義,以及爲什麼它是這樣縮寫的嗎?
這是一個奇怪的語法,但它的簡寫:
if(acceptBtn)
acceptBtn.disabled = false;
我個人從來沒有使用它,但..壞可讀性。
它是「如果acceptBtn
不是」falsy「,則將其設置爲disabled
屬性爲false
」。
即:
if(acceptBtn){
acceptBtn.disabled = false;
}
第二行利用了Javascript短路布爾操作這一事實,也就是說,如果第一部分評估爲false,那麼第二部分不會執行。
它也利用了這個事實,即javascript可以在布爾表達式中使用truthy/falsey值。
因此,第二行說,如果acceptBtn
是falsey(可能:null或undefined),則不要再進一步,否則將disabled
屬性設置爲false。
它停止運行到相當於空引用異常的JavaScript。
不僅僅是'null'值,而是通過類型強制評估爲'false'的任何值。所以'0','undefined','''''等等 – tkone 2014-10-30 13:27:32