JavaScript &&、||和??
&&
&&前面的值为true,则直接返回后面的值
&&前面的值为false,则直接返回前面的值
- 真后假前
console.log(1&&2); // 2
console.log(false&&1); // false
console.log(1&&false&&2); // false (1&&false --> false;false&&2 --> false)
console.log(1&&2&&false); // false (1&&2 --> 2;2&&false --> false)
||
||前面的值为true,则直接返回前面的值
||前面的值为false,则直接返回后面的值
- 真前假后
console.log(1||2); // 1
console.log(false||2); // 2
console.log(1||false||2); // 1 (1||false --> 1;1||2 --> 1)
console.log(1||2||false); // 1 (1||2 --> 1;1||false --> 1)
??
??逻辑与||类似,不同点在于??只在变量为初始化、null或undefined时取后面的值。
if在无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么if判断 false
var a;
console.log(a||1); // 1
console.log(0||1); // 1
console.log(-0||1); // 1
console.log(null||1); // 1
console.log(""||1); // 1
console.log(false||1); // 1
console.log(undefined||1); // 1
console.log(NaN||1); // 1
console.log(a??1); // 1
console.log(0??1); // 0
console.log(-0??1); // -0
console.log(null??1); // 1
console.log(""??1); // ""
console.log(false??1); // false
console.log(undefined??1); // 1
console.log(NaN??1); // NaN