你怎么用的?:JavaScript中的(条件)运算符?

muu*_*ess 392 javascript ternary-operator

有人可以用简单的话向我解释什么是?:(有条件的,"三元")运算符以及如何使用它?

Pet*_*son 592

这是if-else语句的单行简写.它被称为条件运算符.1

以下是可以使用条件运算符缩短的代码示例:

var userType;
if (userIsYoungerThan18) {
  userType = "Minor";
} else {
  userType = "Adult";
}

if (userIsYoungerThan21) {
  serveDrink("Grape Juice");
} else {
  serveDrink("Wine");
}
Run Code Online (Sandbox Code Playgroud)

这可以通过以下方式缩短?::

var userType = userIsYoungerThan18 ? "Minor" : "Adult";

serveDrink(userIsYoungerThan21 ? "Grape Juice" : "Wine");
Run Code Online (Sandbox Code Playgroud)

在Javascript中,条件运算符可以计算表达式,而不仅仅是一个语句:

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();
Run Code Online (Sandbox Code Playgroud)

他们甚至可以链接:

serveDrink(userIsYoungerThan4 ? 'Milk' : userIsYoungerThan21 ? 'Grape Juice' : 'Wine');
Run Code Online (Sandbox Code Playgroud)

但要小心,否则你最终会得到像这样的复杂代码:

var k = a ? (b ? (c ? d : e) : (d ? e : f)) : f ? (g ? h : i) : j;
Run Code Online (Sandbox Code Playgroud)

1 通常称为"三元运算符",但事实上它只是一个三元运算符[一个接受三个运算符的运算符].不过,它是目前唯一拥有的JavaScript.

  • 只是为了澄清名称:`ternary`是运算符的*类型*(即它有3个部分).*特定三元运算符*的名称是"条件运算符".恰好在JS中只有一个三元运算符,因此这些术语被误用了. (52认同)
  • 不知道为什么底部有一点语法模糊,但是不正确.如果javascript只有一个类型的运算符,那么说三元运算符而不是一个三元运算符肯定是正确的......说"这个三元运算符是javascript中的三元运算符(它是唯一的运算符)"是愚蠢,只需使用THE,它意味着所有这一切. (7认同)
  • 强烈建议更新常见用例的示例,而不是经常被引用为滥用操作员的副作用用例。 (2认同)

Jef*_*aal 126

我想在给定答案中添加一些内容.

如果你遇到(或想要使用)三元组的情况,比如'显示一个变量,如果已设置,否则......',你可以让它更短,没有三元组.


代替:

var welcomeMessage  = 'Hello ' + (username ? username : 'guest');
Run Code Online (Sandbox Code Playgroud)

您可以使用:

var welcomeMessage  = 'Hello ' + (username || 'guest');
Run Code Online (Sandbox Code Playgroud)

这是Javascripts等效的PHP的速记三元运算符 ?:

甚至:

var welcomeMessage  = 'Hello ' + (username || something || maybethis || 'guest');
Run Code Online (Sandbox Code Playgroud)

它评估变量,如果它是假的或未设置,它继续下一个.

  • @Shiva如果没有括号,它会评估*整个*左侧部分:`'Hello' + username`,它始终是`true`,因为它是一个长度大于0的字符串。 (4认同)
  • 我在三元挣扎中,最终找到了这个答案。谢谢! (3认同)

Mic*_*son 25

它被称为"三元"或"条件"运算符.

?:运算符可用作if ... else语句的快捷方式.它通常用作较大表达式的一部分,其中if ... else语句会很笨拙.例如:

var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");
Run Code Online (Sandbox Code Playgroud)

该示例创建一个包含"晚上好"的字符串.如果是在下午6点之后 使用if ... else语句的等效代码如下所示:

var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
   greeting += " evening.";
else
   greeting += " day.";
Run Code Online (Sandbox Code Playgroud)

来自MSDN JS文档.

基本上它是一个简写条件语句.

另见:

  • 人们还在争论这些东西吗?吉兹. (7认同)
  • @BoltClock - 不完全是争论,只是试图规范我们的基本词汇. (7认同)
  • 它实际上称为条件运算符. (5认同)
  • 它是一个三元条件运算符 (5认同)
  • @Michael - 请参阅规范**11.12条件运算符(?:)**:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf (4认同)

Dav*_*ang 20

当你所拥有的只是符号时,google有点困难;)使用的术语是"javascript条件运算符".

如果你在Javascript中看到更多有趣的符号,你应该首先尝试查找Javascript的运算符:MDC的运算符列表.您可能遇到的一个例外是$符号.

为了回答你的问题,条件运算符替换简单的if语句.一个例子是最好的:

var insurancePremium = age > 21 ? 100 : 200;
Run Code Online (Sandbox Code Playgroud)

代替:

var insurancePremium;

if (age > 21) {
    insurancePremium = 100;
} else {
    insurancePremium = 200;
}
Run Code Online (Sandbox Code Playgroud)


Ern*_*ill 8

z = (x == y ? 1 : 2);
Run Code Online (Sandbox Code Playgroud)

相当于

if (x == y)
    z = 1;
else
    z = 2;
Run Code Online (Sandbox Code Playgroud)

当然,除了它更短.


Sim*_*ans 6

三元运算符

通常我们在Javascript中有条件语句.

例:

if (true) {
    console.log(1)
} 
else {
    console.log(0)
}
# Answer
# 1
Run Code Online (Sandbox Code Playgroud)

但它包含两行或更多行,无法分配给变量.Javascript有一个解决这个问题三元运算符的解决方案.三元运算符可以在一行中写入并分配给变量.

例:

var operator = true ? 1 : 0
console.log(operator)
# Answer
# 1
Run Code Online (Sandbox Code Playgroud)

这个三元运算符在C编程语言中是类似的.


eag*_*e12 5

它被称为三元运算符

tmp = (foo==1 ? true : false);
Run Code Online (Sandbox Code Playgroud)

  • 它被称为条件运算符.它恰好是该语言中_a_三元运算符的唯一示例. (6认同)
  • tmp = foo == 1 做同样的事情所以这就足够了 (2认同)

Guy*_*ren 5

嗨,伙伴们还记得js通过评估true或false起作用,对吗?

让我们来一个三元运算符:

questionAnswered ? "Awesome!" : "damn" ;
Run Code Online (Sandbox Code Playgroud)

首先,js检查questionAnswered是true还是false

如果 true?),您将获得“超赞!”

否则(:),您将获得“该死”;

希望这对朋友有帮助:)


Ari*_*rif 5

大多数答案都是正确的,但我想补充一点。该三元运算符是右结合的,这意味着它可以被链接以下列方式if … else-if?… else-if … else

function example() {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}
Run Code Online (Sandbox Code Playgroud)

相当于:

function example() {
    if (condition1) { return value1; }
    else if (condition2) { return value2; }
    else if (condition3) { return value3; }
    else { return value4; }
}
Run Code Online (Sandbox Code Playgroud)

更多细节在这里

  • 这就是我正在寻找的。 (3认同)