JS 0 ===(0 || 6);返回false-为什么?

时间:2018-08-20 00:04:38

标签: javascript conditional equality conditional-operator

0 === (0 || 6) // returns false
false === (false || 6) // returns false
(false === false || false === 6) // returns true
(0 === 0 || 0 === 6) // returns true

console.log( 0 === (0 || 6) );
console.log( false === (false || 6) );
console.log( (false === false || false === 6) );
console.log( (0 === 0 || 0 === 6) );

给什么?我之前遇到过这种情况,但并没有理解。

4 个答案:

答案 0 :(得分:1)

0 === (0 || 6) // returns false

这与操作顺序有关。因为返回括号是第一个,所以返回false。因此(0 || 6)返回6,而0 === 6false

false === (false || 6) // returns false

(false === false || false === 6) // returns true

(0 === 0 || 0 === 6) // returns true

在进行了解释之后,其余的内容很容易理解。

答案 1 :(得分:1)

0 === (0 || 6)等效于0 === 6,这当然是错误的。

false === (false || 6)等效于false === 6,这显然也是错误的。

(false === false || false === 6)等同于true || false,这当然是正确的。

(0 === 0 || 0 === 6)也等同于true || false

查找“运算符优先级”。将来,这将帮助您全神贯注地使用javascript。

答案 2 :(得分:0)

首先,您应该知道操作员的优先级。

第二,您应该知道操作员如何工作以及他们返回什么。

Here is the documentation you can take it as reference

console.log( 0 === (0 || 6) );
// (0 || 6) returns 6 because 0 is falsy,
// so it becomes 0 === 6. It is obviously return false.

console.log( false === (false || 6) );
(false || 6) is equals (0 || 6), so we get (false === 6) = false.

console.log( (false === false || false === 6) );
// this is three part. === is prior to ||, 
// so we should do (false === false) and (false === 6).
// (false === false) is true and (false === 6) is false,
// so we get (true || false) = true

console.log( (0 === 0 || 0 === 6) );
// (0 === 0) is true and (0 === 6) is false,
// so true || false is true.

  

顺便说一下,大多数JavaScript运算符都会进行类型转换   双方是否不是操作员想要的类型。   您可以看一下以下内容:

     

https://javascript.info/type-conversions

答案 3 :(得分:0)

根据您的问题,我想您对ANDOR的使用或工作方式并不熟悉。

所以

|代表按位OR

并且&代表按位AND

这是将AND写为&&并将OR写为||的常见方法。

对于AND,以下情况是

 1 && 1 => 1
 1 && 0 => 0
 0 && 1 => 0
 0 && 0 => 0

对于OR,以下情况是

 1 || 1 => 1
 1 || 0 => 1
 0 || 1 => 1
 0 || 0 => 0

在上面,1可以是任何非零的整数或值(但我们用1表示它,表示)。

所以,如果你写,

0 === ( 0 || 6 )

然后,( 0 || 6 )已经是true,那么,如果将true0进行比较,则它总是错误的。

如果您将上述条件更改为:

0 == ( 0 && 6 ),(已编辑

( 0 && 6 )变为false,然后0 == false变为true

=====是不同的,因为第二个仅检查它们是否相等,但不检查它们是否完全相同。 ===检查值是否相同,即完全相同。

我希望我的回答会有所帮助。