如题所述,JavaScript中&&和||可以用在普通的语句中,但是具体没有理解透它们的机制,求讲解,谢谢!
类似这样
var orResult = a || b|| c;
var andResult = a && b && c;
如题所述,JavaScript中&&和||可以用在普通的语句中,但是具体没有理解透它们的机制,求讲解,谢谢!
类似这样
var orResult = a || b|| c;
var andResult = a && b && c;
其实这种特性叫短路求值,&&
会返回第一个假值(0
, null
, ""
, undefined
, NaN
),而 ||
则会返回第一个真值。
所以 &&
有时候会用来代替 if (expression) doSomething()
,转成 &&
方式就是 expression && doSomething()
。
而 ||
比较用来在函数中设置默认值,比如
function doSomething(arg1, arg2, arg3) {
arg1 = arg1 || 'arg1Value';
arg2 = arg2 || 'arg2Value';
}
不过还需要看具体的使用场景,就比如如果要求 doSomething()
传入的 arg1
为一个数值,则上面的写法就会出现问题(在传入 0
的时候被认为是一个假值而使用默认值)。
现在个人比较常用的方法只判断是否与 undefined
相等,比如
function doSomething(arg) {
arg = arg !== void 0 ? arg : 0;
}
机制就是根据布尔值返回起决定性作用的值
我只能说你举得栗子也是在判断!
requestFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame
你的问题表述不是特别清楚啊,是不是下面代码中||和&&使用的问题:
var orResult = a || b;
var andResult = a && b;
如果是的话,运算结果如下(参考W3CSchool):
&&
操作结果如果一个运算数是对象,另一个是 Boolean 值,返回该对象
如果两个运算数都是对象,返回第二个对象
如果某个运算数是 null,返回 null
如果某个运算数是 NaN,返回 NaN
如果某个运算数是 undefined,发生错误
||
操作结果如果一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象
如果两个运算数都是对象,返回第一个对象
如果最后一个运算数是 null,并且其他运算数值均为 false,则返回 null
如果最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN
如果某个运算数是 undefined,发生错误
逻辑与 (&&) expr1 && expr2 如果expr1 能转换成false则返回expr1,否则返回expr2.
那如果这样的式子:
d = a && b && c;
是不是就是,当a为false时,将a赋值给d,当a为true就判断b;
当b为false时,将b赋值给d,当b为true就直接将c赋值给d了
而不管c是true还是false
逻辑或 (||) expr1 || expr2 如果expr1能转换成true则返回expr1,否则返回expr2.
那如果这样的式子:
d = a || b || c;
是不是就是,当a为true时,将a赋值给d,当a为false就判断b;
当b为true时,将b赋值给d,当b为false就直接将c赋值给dl了
而不管c是true还是false
不知道我这样理解是不是正确的 @公子
逻辑判断的短路原则
1、&&运算:
a && b ; a如果为false了(空字符,0,null或undefined等),b就没必要计算了,结果肯定为false,直接返回a的值,因为&&运算符号要返回true要求运算符两边同时为true。
console.log(0 && 1); // 0
console.log(null && 1); // null
console.log(2 && 0 && 1); // 0
console.log(2 && 0 && ...&& 1); // 0
2、||运算符:
a||b; 因为||运算符两边只要有一个为true,整个表达式的结果就为true了,当a为true时,b的计算已经无意义,所以直接返回a的值就ok了
console.log(0 || 1); // 1
console.log(null || 1); // 1
console.log(2 || 0 || 1); // 2
console.log(2 || 1 || 0 ||...|| 1); //2
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
var x = a || b || c 等价于:
var x = a && b && c 等价于: