【问题标题】:What's difference in using else-if vs or in JavaScript使用 else-if 和 JavaScript 有什么区别
【发布时间】:2021-11-28 02:53:38
【问题描述】:

我正在创建一个石头剪刀布游戏来测试我对函数的了解。 我编写了这段代码来查看用户是否输入了有效的石头、纸或剪刀:

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 而不是打印“Invalid Option”。

当我检查解决方案时,我看到了这个:

if (userInput === 'rock' || userInput === 'paper' || ... ) {
  return userInput;
} else {
  console.log('Error!');
}

那么使用 else-if 来完成这个任务和使用 || 操作符有什么区别呢?

编辑: 我犯了一个错误,使用 = 而不是 ===,所以它得到了修复,但我仍然想知道是否有任何区别,以及对于特定用例哪种更有效。

【问题讨论】:

  • 当我在浏览器的开发工具中运行您的代码示例时,它会将'Invalid Option' 打印到控制台,而不是'rock'。您确定您问题中的代码与产生该意外结果的代码相同吗?
  • @Mark Hanna,在其中一个答案指出我使用 = 而不是 === 之后,我编辑了我的代码
  • 啊,这就解释了:)

标签: javascript if-statement logical-operators


【解决方案1】:

使用||和使用if/else在功能上没有区别。

在 JavaScript 中,|| 运算符的工作方式如下:

对于a || b,检查a 是否为truthy。如果是,请转至a。否则,解析为b

现在,您可能已经注意到,其措辞与您描述if/else 条件块的行为的方式几乎相同。在功能上,行为上没有区别。

在相关说明中,&& 运算符以类似的方式工作,除非a 为真,a && b 才会解析为b。如果您曾经查看过缩小的代码,您有时会看到 && 用于替换 if 语句,因为 a && b 在功能上与 if (a) { b; } 相同,但占用的字符更少。

我不建议在未缩小的代码中使用这种方法,因为它肯定更难遵循,但它确实占用了更少的字符而没有不同的功能,这就是缩小器使用它的原因。有点类似于他们经常使用!0 而不是true

【讨论】:

  • 是否 === 比较真实值或真实值?
  • === 比较两个值是否相等,不进行类型强制,而== 将进行类型强制。例如,'' == false 将解析为 true,而 '' === false 将解析为 false。在几乎所有情况下,您都需要使用=== 来帮助避免错误。
  • 所以不管是真是假?
  • 如果您使用的是==,那么一些 真实值将被报告为与true 相同,但不是全部。例如1 == true 解析为true,但2 == true 解析为false。我建议在进行这样的比较时始终使用===。但是,当涉及到 if 条件中的表达式结果时,该值只需 truthy
【解决方案2】:

问题在于 ==== 运算符。 === 用于检查是否相等,= 用于赋值。

当你写作时 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 的值。

【讨论】:

  • OP 在if 检查中使用= 可能是一个错字,而== 的本意是。问题更多是关于比较两个if 块。
  • 感谢您指出错误@Jagrut Sharma
  • 那么逻辑上没有错误?
  • 还可以查看switch-case。如果您有很多选择,这很有用。
  • 不客气。享受学习一门新语言的旅程!
【解决方案3】:

不同之处在于 if else 语句仅在前面的 if/if else 为 false 时才检查/运行。如果任何单个条件为真,则 or (||) 语句为真

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多