使用 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,则会发生以下情况:

  1. A被评估。如果值为 true,则不计算 B 和 C。
  2. 如果A是false,那么B就是evaluated
  3. 如果 B 为真,则不计算 C
  4. 否则,计算 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.