【问题标题】:What does this syntax mean? [duplicate]这个语法是什么意思? [复制]
【发布时间】:2011-10-27 11:36:20
【问题描述】:

可能重复:
Question mark in JavaScript

我已经看过几次了,但我从来不知道这是什么意思。它叫什么名字,它是如何工作的?

这是我看到的例子:

input.checked = input.type == "radio" ? true : false;

【问题讨论】:

  • 你确定这里应该有2个等号:input.checked == input.type
  • 我希望你不要经常看到这种多余且没有括号的代码......
  • 这是准确代码吗?看起来有点可疑……你有它的网址吗?
  • 代码真的应该改成input.checked = (input.type === "radio");
  • 是的。那是我的错。我并不是要在第一条语句中使用额外的等号。

标签: javascript


【解决方案1】:

那个例子中有一个额外的=,我想你的意思是:

input.checked = input.type == "radio" ? true : false;

(现在已经修复了。)

如果input.type == "radio" 则将true 分配给input.checked,否则将false 分配给false

那个

expression ? trueResult : falseResult

...被称为 条件运算符(或者有时,“三元”运算符——从技术上讲,它只是 a 三元运算符,例如,一个需要三个操作数)。更多内容请参见规范中的Section 11.12

在这种情况下,使用条件运算符绝对没有意义,因为等价表达式的结果无论如何都是truefalse,所以它可以写成:

input.checked = input.type == "radio";

...但是有很多地方条件运算符很有用。例如,假设您想将 12 分配给 x,具体取决于 y 是否为 42:

x = y == 42 ? 1 : 2;

您可以将? 视为询问是或否的问题,其后为“是”答案,: 后为“否”答案。

【讨论】:

  • “三元”运算符是否需要 falseResult 值?如果我愿意,我可以省略吗?
  • @David:如果条件表达式的值(? 之前的表达式)不是基于通常的 JavaScript 规则的布尔值(就像表达式您在if 语句中使用)。我不确定你所说的“你能不能把它排除在外”是什么意思。如果您在问题中分配truefalse,那么正如我所说,不需要条件运算符——只需将结果直接分配给checked。但是,如果您想分配除 truefalse 以外的其他内容,则在某些情况下,条件运算符是一种方便的方法。
  • @David:哦,对不起,我明白你的意思了。是的,使用条件运算符时需要 false 部分。你必须在: 和表达式的结尾之间有一些东西。否则使用if 或JavaScript 的curiously powerful || and && operators
【解决方案2】:

也许这样更容易理解:

input.checked = (input.type == "radio")? true : false;

基本上是一个if else。如果表达式为真,则 input.checked 将设置为第一个值,否则设置为第二个值。

[编辑]

请注意,在 JavaScript 中,在评估字符串以检查类型相等性时,您应该始终使用 '===' 而不是 '=='。

【讨论】:

  • 不完全 - 请注意 input.checked 的双 ==。这不是作业,而是比较。
  • 啊,错过了,我已经编辑了我的答案。感谢您指出。
  • @Jon,我很确定 OP 有错字。
  • 你应该建议在Javascript中使用===而不是==
  • “三元”运算符是否需要错误的结果值?如果我愿意,我可以省略吗?
【解决方案3】:

这是一个三元表达式。它是以下的简写:

if (input.type == "radio") {
    input.checked = true;
} else {
    input.checked = false;
}

但是,在这个特定示例中存在冗余。它可以简单地写成:

input.checked = input.type == "radio";

【讨论】:

  • 三元运算符是否需要假结果值?如果我愿意,我可以忽略它吗??
  • @David 是的(对你的第一个问题)。不(到你的第二个)。
【解决方案4】:

也许第一个===

看起来像 ternary operator.(短 else-if 结构)

【讨论】:

  • 三元运算符是否需要假结果值??如果我愿意,我可以忽略它吗??
  • 在 javascript 中是必需的。你不能做像a = ( x == 3) ? 5; 这样的事情,但你可以这样做:a = ( x==3 ) ? 5 : a。这意味着在错误结果的情况下,a 将等于 a
猜你喜欢
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多