(|)和(||)之间有什么区别?

时间:2011-04-17 00:01:47

标签: javascript operators

Javascript中|||之间有什么区别?

此外,&&&之间有什么区别?

7 个答案:

答案 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”

|&按位运算符。它们以特定方式对位进行操作,维基文章详细解释了这些:

http://en.wikipedia.org/wiki/Bitwise_operation

答案 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为真。