1. 邏輯運算符 && || !
短路運算
如果參與邏輯運算的表達式,第一個式子就能決定整個邏輯表達式的結果,那么就不會去算第二個式子的值,這個就是短路運算。
var num1 = 10;
var num2 = 20;
var res = num1 < 0 && num2++ > 0;
console.log(res); //false
console.log(num2); //20
//num1 < 0 已經為false,所以不執行后面的
var num1 = 10;
var num2 = 20;
var res2 = num1 > 0 || ++num2 > 0;
console.log(res2); //true
console.log(num2); //20
//num1 > 0 已經為true,所以不執行后面的
2.邏輯表達式的結果,不一定都是true或者false,有可能是其他的值。
var num1 = 10;
var num2 = 20;
var res = num1 && num2++ > 0;
console.log(res); // true
console.log(num2); // 21
2.1 邏輯與表達式
找假,如果第一個式子能夠轉換成布爾類型的false的話, 那么整個邏輯與表達式的結果就是第一個式子的值;如果第一個式子不能轉換成布爾類型的false的話,那么整個邏輯與表達式的結果就是第二個式子的值,不管第二個式子是什么。
var num = 10;
var res = undefined && ++num;
console.log(res); //undefinef
console.log(num); //10
var num = 10;
var res = 200 && ++num;
console.log(res); //11
console.log(num); //11
2.2 邏輯或表達式
找真,如果參與邏輯或運算的第一個表達式能夠轉換成布爾類型的true的話,那么這整個邏輯或表達式的結果就是第一個式子的值;
var num =10;
var res = 200 || num++ >0;
console.log(res); //200
console.log(num); //10
//如果第一個式子不能轉換布爾類型的true的話,那么整個邏輯或表達式的結果就是第二個式子的值,不管第二個式子是什么。
var num =10;
var res = undefined || num++;
console.log(res); //10
console.log(num); //11