Javascript中|
和||
之间有什么区别?
此外,&
和&&
之间有什么区别?
答案 0 :(得分:18)
|
是按位或||
是逻辑或。
按位或取两个数字并逐位比较它们,产生一个新的整数,它将两个输入的1位组合在一起。因此0101 | 1010
会生成1111
。
逻辑或||
检查值的“真实性”(取决于类型,对于整数0为假,非零为真)。它从左到右评估语句,并返回第一个值为truthy的值。所以0101 || 1010
会返回0101
,这是真实的,因此整个陈述都是真的。
相同类型的逻辑适用于&
vs &&
。 0101 & 1010
= 0000
。但0101 && 1010
计算结果为1010
(&&
只返回最后一个真值,只要两个操作数都是真实的。)
答案 1 :(得分:12)
区别在于逻辑运算符只考虑面值的每个输入,将它们视为整体,而bitwise operators work at the bit level:
var thetruth = false;
var therest = true;
var theuniverse = thetruth && therest; //false
var theparallel = thetruth && thetruth; //true
var theindifferent = thetruth || therest; //true
var theideal = thetruth || thetruth; // false
var thematrix = 5346908590;
var mrsmith = 2354656767;
var theoracle = thematrix & mrsmith; //202445230
var theone = thematrix | mrsmith; //7499120127
答案 2 :(得分:3)
另一个区别是||
使用快捷方式评估。也就是说,如果左侧为false
(或在布尔上下文中转换为false,例如0
,""
,null
等,它仅评估右侧)。类似地,如果左侧是&&
(或非零,非空字符串,对象等),true
仅评估右侧。 |
和&
始终评估双方,因为结果取决于每个值中的确切位数。
理由是,对于||
,如果任何一方都为真,则整个表达式为真,因此无需进一步评估。 &&
是相同的但是相反。
||
的确切逻辑是,如果左侧是“truthy”,则返回该值(注意它未转换为布尔),否则,评估和返回右手边。对于&&
,如果左侧是“falsey”,则返回它,否则评估并返回右侧。
以下是一些例子:
false && console.log("Nothing happens here");
true || console.log("Or here");
false || console.log("This DOES get logged");
"foo" && console.log("So does this");
if (obj && obj.property) // make sure obj is not null before accessing a property
答案 3 :(得分:1)
用外行的话来解释一下:
&&
和||
是逻辑运算符。这意味着它们用于逻辑比较;
if (a == 4 && b == 5)
这意味着“如果a等于4 AND b等于5”
|
和&
是按位运算符。它们以特定方式对位进行操作,维基文章详细解释了这些:
答案 4 :(得分:0)
我要添加的另一点是||运算符用于指定默认值,以防您指定的值未定义。因此,对于Exapmle,您将obj分配给某个对象测试,如果您不希望测试未定义,那么您可以执行以下操作以确保测试值不会被定义。
var test = obj || {};
所以如果obj未定义,那么test的值将是空对象。
因此它也被用于为您的对象分配默认值。
答案 5 :(得分:0)
在Javascript视角中,还有更多内容。
var a = 42;
var b = "abc";
var c = null;
a || b; // 42
a && b; // "abc"
c || b; // "abc"
c && b; // null
两者都是||和&&运算符对第一个操作数(a或c)执行布尔测试。如果操作数不是布尔值(因为它不是,这里),会发生正常的ToBoolean强制,以便可以执行测试。
对于||运算符,如果测试为真,则为||表达式导致第一个操作数(a或c)的值。如果测试结果为假,则为||表达式导致第二个操作数(b)的值。
相反,对于&&操作员,如果测试是真的,&&表达式导致第二个操作数(b)的值。如果测试结果为假,则&&表达式导致第一个操作数(a或c)的值。
||的结果或者&&表达式始终是其中一个操作数的基础值,而不是测试的(可能是强制的)结果。在c&& b,c为空,因此是假的。但&&表达式本身导致null(c中的值),而不是测试中使用的强制false。
答案 6 :(得分:0)
单身|有点明智的OR运算符。 如果你做2 | 3,它转换为二进制并执行OR运算。 01 11 结果11等于3。
在哪里作为|| operator检查第一个参数是否为true,如果为true则返回,否则返回其他运算符。 2 || 3返回2,因为2为真。