|| 和 && 通常使用在条件表达式中,但是由于javascript语言的特殊性,这两个符号又被开发出了特别的使用技巧。

最基本的用法

console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false

这是所有的编程语音通用的使用方法,毋庸置疑。

javascript中可以这么用

var target, num;
target = undefined || 'defaultValue'; // defaultValue
num = 0 || 1; // 1

你可以看成这样:

var target;
target = false || 'defaultValue'; // defaultValue
num = false || 1; // 1

因为在javascript中Object、function、非0的整数和字符串都为true,undefined、null和空字符串”” 为false

但是javascript中却可以返回为true表达式的值,应该理解为“真值”和“假值”更贴切。

‘||’在javascript中的规则:如果||左侧表达式的值为真值,则返回左侧表达式的值;否则返回右侧表达式的值。

console.log('真值'||''); // 真值
console.log(undefined||object); // object

‘&&’在javascript中的规则:如果&&左侧表达式的值为真值,则返回右侧表达式的值;否则返回左侧表达式的值。

console.log(1 === 1 && 2) // 2
console.log(0 === 1 && 2) // false

于是有了高逼格的javascript代码

var n=1;
((n === 1) && (n = 3)) || ((n === 3) && (n = 6)) || (n = 2); // 3
((n === 1) && (n = 3)) || ((n === 3) && (n = 6)) || (n = 2); // 6
((n === 1) && (n = 3)) || ((n === 3) && (n = 6)) || (n = 2); // 2
//以上代码等价于
if(n === 1) {
n = 3;
} else if(n === 3) {
n = 6;
} else {
n = 2;
}