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”);
}
如果(‘香蕉’){
警惕(“你好”);

}
这里有两个表达式

  • “apple2”==解析为falsy的a
  • “香蕉”决定了它的味道

  • 因为“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