很多时候最基础的反而掌握的不那么全面,只是一知半解。在此做下记录。
逻辑与(&&)
返回两个操作数中,其中一个操作数的值,具体是返回第一个还是第二个,分情况
boolean类型:
true && false; // false
true && true; // true
false && true; // false
false && false; // false
// 非boolean类型:
2 && 1; // 1
2 && 5; // 5
{} && {}; // {}
1 && { b:1}; // {b: 1}
1 && null; // null
null && 1; // null
undefined && 1; // undefined
undefined && {}; // undefined
NaN && 1; // NaN
NaN && {}; // NaN
逻辑非(||)
返回两个操作数中,其中一个操作数的值,具体是返回第一个还是第二个,分情况
boolean类型:
console.log(true || false); // true
console.log(true || true); // true
console.log(false || true); // true
console.log(false || false); // false
// 非boolean类型
console.log(2 || 1); // 2
console.log(2 || 5); // 2
console.log({} || {}); // {}
console.log(1 || { b: 1 }); // 1
console.log(1 || null); // 1
console.log(null || 1); // 1
console.log(undefined || 1); // 1
console.log(undefined || {}); // {}
console.log(NaN || 1); // 1
console.log(NaN || {}); // {}
其实,无论是什么类型,原理都是一样的。逻辑运算符操作对象都是遵循从左至右的顺序来判断。
逻辑与操作符,先判断第一个操作数,即转为boolean类型后,是true还是false
false: 则直接返回第一个操作数的值;
true: 则返回第二个操作数的值。
逻辑或操作符,先判断第一个操作数,即转为boolean类型后,是true还是false
false: 返回第二个数的值
true: 返回第一个数的值
注意,不是转为boolean类型的值,而是原本的值;
逻辑非(!)
将操作数转为boolean类型并且取反
!0; // true, 0转为boolean为false,取反则为true
!1; // false,1是非零的数字,转为boolean为true,取反则为false
!''; // true, 空字符串转为boolean是false,取反则为true
!{}; // false, 对象转为boolean,无论是不是空对象,都是true,取反则为false