有人可以向我解释逻辑“ OR”运算符的范围如何在Javascript中工作吗?

问题描述 投票:0回答:2

这是我的代码。

function getVowelCount(str) {
 let array = str.split("");
 let vowelCount = array.reduce((acc, curr) => {
   if (curr === 'a' || curr === 'e' || curr === 'i' || curr === 'o' || curr === 'u') {
     acc++
   } return acc
 }, 0);
 return vowelCount
}

我是编码的新手,我从Java语言开始。有人能解释为什么我不能在if语句中使用"(curr === 'a' ||'e' || 'i' || 'o' || 'u')"吗?我以为可以这样处理: “如果当前值为'a'或'e'或'i'等...

谢谢。

javascript logical-operators
2个回答
1
投票

===具有比||高的运算顺序。相等顺序的运算符从左到右进行评估。

((有关完整订单,请参阅mdn

所以curr === 'a' ||'e' || 'i' || 'o' || 'u'等于

(((((curr === 'a') ||'e') || 'i') || 'o') || 'u')

可以减少到curr === 'a' ? true : 'e'


1
投票

就像数学有一个运算顺序(加法/减法之前的乘法/除法),javascript's operators have an order。在(curr === 'a' ||'e' || 'i' || 'o' || 'u')中,最高优先级是===,因此它是通过比较curr === 'a'开始的。这将导致truefalse。假设false

接下来是所有的||。这些操作从左到右完成,因此比较false || 'e'。除空字符串外,每个字符串都是“真值”,因此false || 'e'也是真实的。

它将继续向右移动,除非一旦确定结果,逻辑或运算符就会短路。所以整个表达是真实的。


即使||的优先级更高,也无法完成这项工作。对于'a' || 'e',这两个都是“真实的”,因此它只取第一个真实值,即a。这会重复,这意味着'a' || 'e' || 'i' || 'o' || 'u''a'的复杂表达方式。

console.log('a' || 'e' || 'i' || 'o' || 'u')
© www.soinside.com 2019 - 2024. All rights reserved.