js短路,||、&&、!!短路運算子的使用
阿新 • • 發佈:2019-02-06
||,先計算第一個運算數,如果可以被轉換成true,則返回左邊這個表示式的值,否則計算第二個運算數。即使||運算子的運算數不是布林值,任然可以將它看作布林OR運算,因為無論它返回的值是什麼型別,都可以被轉換為布林值。
利用它對非布林型的值會將其返回的特性:對非布林型的運算數使用||,用於選取一組備選值中的第一個定義了的並且非空的值(第一個為非false的值)
例:
var max = max_width || obj.max_width || 500 ;
var attr = attr || "";這個運算經常用來判斷一個變數是否已定義,如果沒有定義就給他一個初始值,在給函式的引數定義一個預設值的時比較有用。
&&,它先計算第一個表示式,若為假,就不會去處理第二個表達;否則繼續處理後繼表示式。從左到右選取表示式的第一個為非true的表示式的值,如果一直未找到則返回最後一個表示式的值。
例:(其中的味道還需要細心琢磨)
2 && 's1' && '123' && 'sss' 表示式的值等於 'sss'
2 && 's1' && '' && 'sss' 表示式的值等於 ''
2 && 's1' && NaN && 'sss'表示式的值等於 NaN
if(a >=5){
alert("你好");
}
可以簡成:
a >= 5 && alert("你好");
!!,typeof 5和typeof !!5的區別,這是一種更嚴謹的寫法,的作用是把一個其他型別的變數轉成的bool型別。例如, if(!!attr) <=> if(attr)
js中||和&&的特性幫我們精簡了程式碼的同時,也帶來了程式碼可讀性的降低。這就需要我們自己來權衡了。
利用它對非布林型的值會將其返回的特性:對非布林型的運算數使用||,用於選取一組備選值中的第一個定義了的並且非空的值(第一個為非false的值)
例:
var max = max_width || obj.max_width || 500 ;
var attr = attr || "";這個運算經常用來判斷一個變數是否已定義,如果沒有定義就給他一個初始值,在給函式的引數定義一個預設值的時比較有用。
&&,它先計算第一個表示式,若為假,就不會去處理第二個表達;否則繼續處理後繼表示式。從左到右選取表示式的第一個為非true的表示式的值,如果一直未找到則返回最後一個表示式的值。
例:(其中的味道還需要細心琢磨)
2 && 's1' && '123' && 'sss' 表示式的值等於 'sss'
2 && 's1' && '' && 'sss' 表示式的值等於 ''
2 && 's1' && NaN && 'sss'表示式的值等於 NaN
if(a >=5){
alert("你好");
}
可以簡成:
a >= 5 && alert("你好");
!!,typeof 5和typeof !!5的區別,這是一種更嚴謹的寫法,的作用是把一個其他型別的變數轉成的bool型別。例如, if(!!attr) <=> if(attr)
js中||和&&的特性幫我們精簡了程式碼的同時,也帶來了程式碼可讀性的降低。這就需要我們自己來權衡了。