【问题标题】:Using the ternary operator instead of if/else?使用三元运算符而不是 if/else?
【发布时间】:2018-08-07 23:04:46
【问题描述】:

我最近一直在学习三元运算符,以及它如何成为一个很好的快捷方式,而不是使用 if/else 运算符。

我一直在练习,这是一个程序,它可以根据某人的年龄配置应该去哪种类型的学校。

但是,当我运行代码时,它不起作用。

var age = 15;

function whichSchool(age) {
  return (age < 13) ? "Elementary School"
       : (age >= 13 && age <= 18) ? "Secondary School"
       : (age > 18) ? "University"
}

console.log(whichSchool(15))

它说:意外令牌{。

感谢任何帮助。

谢谢。

【问题讨论】:

  • 您在末尾有一个额外的?,但没有对应的:。对于三元运算符,您需要两者。
  • 删除(age &gt; 18) ? 部分,它期待最后一个三元的“else”,它不存在。
  • 既然你没有上限...最后一个条件是毫无意义的
  • 正确的错误在 chrome: "Uncaught SyntaxError: Unexpected token }" 和 FF "SyntaxError: missing : in conditional expression",请阅读并描述正确的错误,它会帮助你理解怎么了。 “意外的令牌 {”没有意义。
  • 另请注意,您刚刚发现为什么在 A** 中链接三元组会很痛苦

标签: javascript ternary-operator


【解决方案1】:

三元语法是conditional ? true : false。您在此处组合了多个 if 条件三元组,但没有满足 if none 条件的逻辑。要更正此问题,请在最终条件后添加 : false 的后备行为:

var age = 15;

function whichSchool(age) {
  return (age < 13) ? "Elementary School"
       : (age >= 13 && age <= 18) ? "Secondary School"
       : (age > 18) ? "University"
       : "None"
}

console.log(whichSchool(15))

请注意,尽管结合上述条件(某人未满 13 岁、13 至 18 岁或超过 18 岁),但实际上永远不会满足此 false 逻辑,您最好只使用 : "University"在这种情况下作为默认值:

var age = 15;

function whichSchool(age) {
  return (age < 13) ? "Elementary School"
       : (age >= 13 && age <= 18) ? "Secondary School"
       : "University"
}

console.log(whichSchool(15))

【讨论】:

  • 因为需要正确验证。您也可以将最后一行简单地更改为`:“大学”,我会更新答案以提及:)
  • 为了使代码更简洁,我会return age &lt; 13 ? "Elementary School" : age &gt; 18 ? "University" : "Secondary School"; - 我的意思是,你正在链接三元组,所以代码无论如何都是不可读的,所以为什么要保留任意顺序 - 检查没有害处 18 并且其他所有内容都必须介于两者之间:p
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 2014-06-16
  • 2022-01-17
  • 2011-02-11
  • 2017-03-25
  • 2010-12-12
  • 2021-01-03
  • 1970-01-01
相关资源
最近更新 更多