使用 else-if 与 or in JavaScript 有什么区别
What's difference in using else-if vs or in JavaScript
我正在创建剪刀石头布游戏来测试我对函数的了解。
我写了这段代码来查看用户是否给出了有效的石头、布或剪刀输入:
const getUserChoice = userInput => {
userInput = userInput.toLowerCase();
if(userInput === 'rock'){
return userInput;
} else if(userInput === 'paper') {
return userInput;
} else if(userInput === 'scissor'){
return userInput;
} else {
console.log('Invalid Option');
}
};
当我通过像这样 console.log
测试最后一个 else
语句时:
console.log(getUserChoice('water'));
它打印出 rock 而不是打印“无效选项”。
当我检查解决方案时,我看到了这个:
if (userInput === 'rock' || userInput === 'paper' || ... ) {
return userInput;
} else {
console.log('Error!');
}
那么使用 else-if 来完成这个任务与使用 ||
运算符有什么区别呢?
编辑:
我错误地使用 = 而不是 ===,所以它得到了修复,但我仍然想知道是否有任何区别,以及对于特定用例哪个更有效。
问题在于 =
与 ===
运算符。
===
用于检查是否相等,=
用于赋值。
写的时候
if(userInput = 'rock')
这意味着 userInput
被赋予了 rock
的值。
你真正想要的是if(userInput === 'rock')
关于||
运算符(也称为OR),发生的是短路运算。如果您写 A || B || C
,则会发生以下情况:
- A被评估。如果值为
true
,则不计算 B 和 C。
- 如果A是
false
,那么B就是evaluated
。
- 如果
B
为真,则不计算 C
。
- 否则,计算 C 并返回 C 的值。
不同的是如果前面的if/if else 为假,则if else 语句只是checked/run。如果任何一个条件为真,则 or (||
) 语句为真
使用 ||
和使用 if
/else
在功能上没有区别。
在JavaScript中,||
运算符是这样工作的:
对于 a || b
,检查 a
是否为 truthy。如果是,则解析为 a
。否则,解析为 b
.
现在,您可能已经注意到,它的措辞与您描述 if
/else
条件块的行为的方式几乎相同。在功能上,行为没有区别。
在相关说明中,&&
运算符以类似的方式工作,除了只有当 a
为真时 a && b
才会解析为 b
。如果你曾经看过缩小代码,你有时会看到 &&
用于替换 if
语句,因为 a && b
在功能上与 if (a) { b; }
相同,但占用的字符更少。
我不建议在未缩小的代码中使用这种方法,因为它肯定更难遵循,但它确实占用更少的字符而功能不同,这就是缩小器使用它的原因。有点类似于他们经常使用 !0
而不是 true
.
我正在创建剪刀石头布游戏来测试我对函数的了解。 我写了这段代码来查看用户是否给出了有效的石头、布或剪刀输入:
const getUserChoice = userInput => {
userInput = userInput.toLowerCase();
if(userInput === 'rock'){
return userInput;
} else if(userInput === 'paper') {
return userInput;
} else if(userInput === 'scissor'){
return userInput;
} else {
console.log('Invalid Option');
}
};
当我通过像这样 console.log
测试最后一个 else
语句时:
console.log(getUserChoice('water'));
它打印出 rock 而不是打印“无效选项”。
当我检查解决方案时,我看到了这个:
if (userInput === 'rock' || userInput === 'paper' || ... ) {
return userInput;
} else {
console.log('Error!');
}
那么使用 else-if 来完成这个任务与使用 ||
运算符有什么区别呢?
编辑: 我错误地使用 = 而不是 ===,所以它得到了修复,但我仍然想知道是否有任何区别,以及对于特定用例哪个更有效。
问题在于 =
与 ===
运算符。
===
用于检查是否相等,=
用于赋值。
写的时候
if(userInput = 'rock')
这意味着 userInput
被赋予了 rock
的值。
你真正想要的是if(userInput === 'rock')
关于||
运算符(也称为OR),发生的是短路运算。如果您写 A || B || C
,则会发生以下情况:
- A被评估。如果值为
true
,则不计算 B 和 C。 - 如果A是
false
,那么B就是evaluated
。 - 如果
B
为真,则不计算C
。 - 否则,计算 C 并返回 C 的值。
不同的是如果前面的if/if else 为假,则if else 语句只是checked/run。如果任何一个条件为真,则 or (||
) 语句为真
使用 ||
和使用 if
/else
在功能上没有区别。
在JavaScript中,||
运算符是这样工作的:
对于 a || b
,检查 a
是否为 truthy。如果是,则解析为 a
。否则,解析为 b
.
现在,您可能已经注意到,它的措辞与您描述 if
/else
条件块的行为的方式几乎相同。在功能上,行为没有区别。
在相关说明中,&&
运算符以类似的方式工作,除了只有当 a
为真时 a && b
才会解析为 b
。如果你曾经看过缩小代码,你有时会看到 &&
用于替换 if
语句,因为 a && b
在功能上与 if (a) { b; }
相同,但占用的字符更少。
我不建议在未缩小的代码中使用这种方法,因为它肯定更难遵循,但它确实占用更少的字符而功能不同,这就是缩小器使用它的原因。有点类似于他们经常使用 !0
而不是 true
.