有人可以向我解释逻辑 "OR" 运算符的范围在 Javascript 中是如何工作的吗?
Can someone explain to me how the scope of the logical "OR" operator works in Javascript?
这是我的代码。
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
}
我是编码新手,刚开始使用 Javascript。有人能解释一下为什么我不能在 if 语句中使用 "(curr === 'a' ||'e' || 'i' || 'o' || 'u')"
吗?我认为那会被处理为; "如果当前值为 'a' OR 'e' OR 'i' 等...
谢谢。
===
的运算顺序高于 ||
。
同阶运算符从左到右求值。
(完整订单请参见 mdn)。
所以curr === 'a' ||'e' || 'i' || 'o' || 'u'
等同于
(((((curr === 'a') ||'e') || 'i') || 'o') || 'u')
可以减少到curr === 'a' ? true : 'e'
。
就像数学有一个运算顺序(multiplication/division 在 addition/subtraction 之前),javascript's operators have an order。在(curr === 'a' ||'e' || 'i' || 'o' || 'u')
中,优先级最高的是===
,所以从比较curr === 'a'
开始。这将导致 true
或 false
。让我们假设 false
.
接下来是所有 ||
。这些是从左到右完成的,所以它比较 false || 'e'
。除空字符串外的每个字符串都是 "truthy",因此 false || 'e'
也是真实的。
它会继续向右移动,除了一旦结果得到保证,逻辑或运算符就会短路。所以整个表达式是真实的。
即使 ||
具有更高的优先级,它也不会使这项工作。对于 'a' || 'e'
,这两个都是 "truthy",所以它只取第一个真值,即 a
。这会重复,意思是 'a' || 'e' || 'i' || 'o' || 'u'
是 'a'
.
的复杂表达方式
console.log('a' || 'e' || 'i' || 'o' || 'u')
这是我的代码。
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
}
我是编码新手,刚开始使用 Javascript。有人能解释一下为什么我不能在 if 语句中使用 "(curr === 'a' ||'e' || 'i' || 'o' || 'u')"
吗?我认为那会被处理为; "如果当前值为 'a' OR 'e' OR 'i' 等...
谢谢。
===
的运算顺序高于 ||
。
同阶运算符从左到右求值。
(完整订单请参见 mdn)。
所以curr === 'a' ||'e' || 'i' || 'o' || 'u'
等同于
(((((curr === 'a') ||'e') || 'i') || 'o') || 'u')
可以减少到curr === 'a' ? true : 'e'
。
就像数学有一个运算顺序(multiplication/division 在 addition/subtraction 之前),javascript's operators have an order。在(curr === 'a' ||'e' || 'i' || 'o' || 'u')
中,优先级最高的是===
,所以从比较curr === 'a'
开始。这将导致 true
或 false
。让我们假设 false
.
接下来是所有 ||
。这些是从左到右完成的,所以它比较 false || 'e'
。除空字符串外的每个字符串都是 "truthy",因此 false || 'e'
也是真实的。
它会继续向右移动,除了一旦结果得到保证,逻辑或运算符就会短路。所以整个表达式是真实的。
即使 ||
具有更高的优先级,它也不会使这项工作。对于 'a' || 'e'
,这两个都是 "truthy",所以它只取第一个真值,即 a
。这会重复,意思是 'a' || 'e' || 'i' || 'o' || 'u'
是 'a'
.
console.log('a' || 'e' || 'i' || 'o' || 'u')