之前有一個同事去面試,面試過程中碰到這樣一個問題:
在js中寫出如下的答案 :
var a = 2;
var b = 3;
var andflag = a && b ;
var orflag = a || b;
問andflag 和orflag 分別是什么?
起初我認為: andflag 和orflag 的值都為 true; 畢竟 && 和 || 都是求Boolean ,后來發現,我錯了。
答案應該是 andflag = 3,orflag = 2;
原因是這樣的:
在運算過程中,首先js 會將 && 和|| 兩邊的值轉成Boolean 類型,然后再算值 ,&&運算如果返回true,則取后面的值,如果|| 返回true,則取前面的值 , 而其中數值轉換成boolean 的規則 是:
對象、非零整數、非空字符串返回true,
其它為false ;
a && b 的運算就是 :因為 a 和 b全是非零整數,所以 a 和 b 也就是true ,而 true && true 返回 true ,則取后面的b ,同理 a 和b 全是非零整數,a 和b 全是true ,則true || true 返回 true ,取|| 前面的值 也就是2;
同樣:該邏輯運算符支持短路原則:
如 var a = “” || null || 3 || 4 —-> var a = fasel || false || true || true 結果為true 則返回第一個true,即是3
var b = 4 && 5 && null && 0 ——> var b = true && true && false && false 結果是false 則返回第一個false 即是null .
