我试图使用这种比较声明,并且几乎可以肯定它会起作用,但事实并非如此。你能解释一下原因吗?
let a = 1
a === ( 1 || 3 ) // true
a === ( 3 || 1 ) // false
感谢您的回复:)
答案 0 :(得分:3)
如果使用OR
比较,如果最左边的表达式中的任何一个为真,则整个表达式结果为true。因此,
( 1 || 3 )
将选择1
,因为1
是最左侧的定义值,当您a === ( 1 || 3 )
时,true
为a === 1
}} true
,a = 1
。
let a = 1;
let rightCondition = ( 1 || 3 );
//this will give 1
console.log(rightCondition);
console.log(a === rightCondition);

但是,( 3 || 1 )
会选择3
,因为3
是最左侧的定义值,当您a === ( 3 || 1 )
时,false
为a === 3
鉴于false
。
a = 1
let a = 1;
let rightCondition = ( 3 || 1 );
//this will give 3
console.log(rightCondition);
console.log(a === rightCondition);

答案 1 :(得分:2)
我认为您正在寻找的比较实际上是:
let a = 1
a === 1 || a === 3 // true
答案 2 :(得分:1)
JavaScript中的整数(如1和3(但不是0))为truthy。因此,您的第一个比较返回1,因为1是真实的,最左边的操作数,第二个返回3,因为3也是真正的最左边的操作数。当找到真值时(从左侧开始),比较立即停止。所以,在你的第二次比较中,程序甚至不看1。