Javascript 为什么'=';和'||';将被评估为真实吗?
我读过这篇文章,它提到了Javascript 为什么'=';和'||';将被评估为真实吗?,javascript,Javascript,我读过这篇文章,它提到了如果(变量==1 | | 2 | | 6)不能工作() 但我试过这个例子,它会被评估为是真的,为什么 var a = 'apple'; if('apple2' == a || 'banana' ) { alert('hi'); } 以下是工作示例: 更新: 如果('apple2'==a | | |'香蕉')未计算为if('apple2==a | | |'苹果'==a | |'香蕉')?如果('apple2'==a | | |'香蕉')的计算方式如下: if(('ap
如果(变量==1 | | 2 | | 6)
不能工作()
但我试过这个例子,它会被评估为是真的,为什么
var a = 'apple';
if('apple2' == a || 'banana' ) {
alert('hi');
}
以下是工作示例:
更新:如果('apple2'==a | | |'香蕉')未计算为if('apple2==a | | |'苹果'==a | |'香蕉')?
如果('apple2'==a | | |'香蕉')
的计算方式如下:
if(('apple2' == a) || ('banana') ), which is:
if :
'apple2' == a // false
||(or)
'banana' // true, since Boolean('banana') is true (a non-empty string is a truthy value)
so => if (false or 'banana') => if ('banana') // => true
如果('apple2'==a | |'apple2'=='banana')由于'banana'始终为真,它将始终运行,请参见下面的示例
var a='apple';
if('apple2'==a){
警报(“hi”);
}
如果(‘香蕉’){
警惕(“你好”);
}
这里有两个表达式
因为“banana”本质上不是未定义的或空的。我们来分解一下表达式:
if('apple2' == a || 'banana' )
要评估的第一个部分是==
,因为它具有最高的:
这是一个标准,返回false
,给出:
if(false || 'banana')
返回的不是true
或false
,而是其参数中的“truthy”。像'banana'
这样的非空字符串被视为“truthy”,因此我们最终得出以下结论:
if('banana')
现在我们再看看'banana'
的“真实性”,if语句继续进行。根据,运算符==
比运算符|
具有更高的优先级。因此,表达式的计算如下所示:
if('apple2' == a || 'banana' )
'apple2' == a //false
'banana' //true (non-empty string)
因此,最终评估将始终正确:
if(false || true) //true
因为非空字符串文本总是
true
。我希望这个答案能帮助您理解javascript的实际功能:最初的“无法工作”可能指的是变量==1 | 2 | 6
总是true,并且不做期望的事情;这并不意味着,if
将永远不会被执行(相反)。否决选民:为什么否决投票?if('apple2'==a | | | |'香蕉')不会被计算为if('apple2==a'| | |'苹果'='banana')?@user8565199谁这么说的?实际上,这里还有一个额外的步骤,那就是false | | | |'香蕉'
计算为,非true
(有关原因,请参阅)。if
然后问“是不是香蕉”
truthy?”然后回答“是”。@Geek先生,是我的错assumption@MrGeek但这并不是要计算的,要计算的是if(false或'banana')
,这反过来相当于if('banana')
。只有if
实际将我们置于布尔上下文中,而不是|
。
if(false || true) //true