【发布时间】:2014-04-03 06:15:33
【问题描述】:
我正在尝试在逻辑运算符两侧的 if 语句中使用多个参数。我首先从 || 开始运算符,按预期工作:
var a = 'apple', b = 'banana', c = 'cherry';
if (a == 'banana' || a == 'apple' || b == 'banana' || b == 'apple') {
console.log('example 1') // returns
}
if ((a || b) == 'banana' || (a || b) == 'apple') {
console.log('example 2') // returns
}
if (a == ('apple' || 'banana') || b == ('apple' || 'banana')) {
console.log('example 3') // returns
}
if ((a || b) == ('apple' || 'banana')) {
console.log('example 4') // returns
}
到目前为止,没有意外的结果。 但是,当替换 || 时遵循类似的结构&& 运算符的运算符,事情并没有像我期望的那样工作。
if ((a == 'banana' && b == 'apple') || (a == 'apple' && b == 'banana')) {
console.log('example 5') // returns
}
if (((a || b) == 'banana') && ((a || b) == 'apple')) {
console.log('example 6') // DOESN'T RETURN
}
if ((a || b) == 'banana') {
console.log('example 6a') // DOESN'T RETURN - consistent with example 6
}
if ((a == ('apple' || 'banana')) && (b == ('apple' || 'banana'))) {
console.log('example 7') // DOESN'T RETURN
}
if (a == ('apple' || 'banana')) {
console.log('example 7a') // returns - inconsistent with example 7
}
if (b == ('apple' || 'banana')) {
console.log('example 7b') // DOESN'T RETURN - inconsistent with example 7a
}
if ((a && b) == ('apple' || 'banana')) {
console.log('example 8') // DOESN'T RETURN
}
if ('apple' == (a || b) && 'banana' == (a || b)) {
console.log('example 9') // DOESN'T RETURN
}
现在,我想知道:我的逻辑是否存在缺陷,或者不能以这种方式完成?为了可读性和可维护性,我的目标是尽可能短地编写这些 if 语句。显然我只是在探索可能性。
有谁知道解决这个问题的方法吗?尤其是示例 7/7a/7b 对我来说似乎很奇怪,因为尽管结构相似,但它产生的结果不一致 [Fiddle]
【问题讨论】:
-
不,不能那样做,
(a||b) == something不是有效的 javascript 并且失败。 -
(a || b) == 'banana' 应该是 (a == 'banana' || b == 'banana')
-
作为旁注,你可以做
if ( /(banana|apple)/.test(a) ) -
我以前从未听说过 .test() 方法! @adeneo
-
您所拥有的内容非常简短易读。您无需缩短 IMO。
标签: javascript if-statement logical-operators multiple-conditions