JavaScript中的问号和冒号

267

我看到了下面这行代码

hsb.s = max != 0 ? 255 * delta / max : 0;

在这个上下文中,?:代表什么意思?


1
这回答了你的问题吗?如何在JavaScript中使用?:(条件)运算符? - Donald Duck
8个回答

377

它被称为条件运算符(也是一个三元运算符)。

它的形式为:条件 ? 真值 : 假值
?看作“那么”,将:看作“否则”。

您的代码等同于

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;

29
"?"不是三元运算符;"? :"才是三元运算符。将"?"称为三元运算符就像谈论阿伯特时没有卡斯泰洛,劳雷尔时没有哈迪,奇奇时没有钟…… - Jason S
11
好的,现在我在使用一个含糊的代词,你满意了吗? :) - Greg
16
严谨来说,它是一个三元运算符,在大多数编程语言中也是唯一的三元运算符。任何操作三个部分的运算符都是三元运算符,就像“加法”是一个二元运算符,作用于前面和后面的表达式上(例如1+2中的加号作用于1和2),或者取反是一个一元运算符(例如-x,其中x的值被取反)。 - Davy8
7
这个可以被称为[标签:条件运算符],更加具体地说。 - Mechanical snail
如果您想要检查两个条件怎么办? - Thanos Dodd
@ThanosDodd - 使用嵌套,或者使用if/else if/else代替。 - T.J. Crowder

40

为了清晰起见,正确地括号化后,它是

hsb.s = (max != 0) ? (255 * delta / max) : 0;

意思是返回以下内容之一:

  • 255*delta/max,如果max != 0
  • 0,如果max == 0

8
hsb.s = max != 0 ? 255 * delta / max : 0;

? 是一个三元运算符,它的作用类似于与 : 一起使用的 if

!= 表示不等于。

因此,这行代码的长形式应该是:

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}

7

当使用括号进行书写时,可能更加清晰明了,如下所示:

hsb.s = (max != 0) ? (255 * delta / max) : 0;

它的功能是评估第一个括号中的部分。如果结果为true,则返回?和:之间的部分。如果结果为false,则返回:后面的部分。

1

?: 是 else {} 和 if(){} 问题的简写条件语句。因此,您的代码可以互换为以下内容:

if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}

MDN - 条件(三元)运算符


0
你所指的是三元运算符,它本质上是一个基本的if条件检查,可以编写以执行操作,如果三元操作中的代码块有效,则执行该操作,否则默认为回退。
三元操作的语法如下:
condition ? exprIfTrue : exprIfFalse
  • condition 一个表达式,其值用作条件。
  • exprIfTrue 如果条件计算结果为真(等于或可以转换为 true),则计算的表达式。
  • exprIfFalse 如果条件计算结果为假(即具有可以转换为 false 的值),则执行的表达式。

示例

考虑下面给定的函数,如果提供给函数的数字是偶数,则应返回字符串 Yes,否则返回 No

function isEven(num) {
    return (num % 2 == 0) ? "Yes" : "No";
}

console.log("2: " + isEven(2));
console.log("3: " + isEven(3));

解释

上述操作可以分解为以下几个部分:

  • (num % 2 == 0) | 这是一个简单的if语句条件,用于检查括号内的表达式是否为真。
  • ? "Yes" 如果条件为真,则自动返回给定的字符串字面值作为此执行的结果。
  • : "No" 这是此操作中的else子句,如果未满足条件,则返回No

0

? : 这不是三元运算符吗?

var x= expression ? true:false


3
这是使用它的一个例子,但实际上有一种更短的版本适用于那些只想要TRUE / FALSE的情况:如果“expression”只是包含数字或字符串的某个变量,“var x = !!expression”将使其成为布尔结果。 - Scott Lahteine

-4

在编程中要小心这一点。虽然-1!= true且-1!= false,但-1会被评估为true。相信我,我曾经见过它发生。

所以

-1?“真侧”:“假侧”

评估为“真侧”


5
在JavaScript中,真值是指在布尔上下文中被认为是true的值。除了false、0、""、null、undefined和NaN这些被定义为假值的情况外,所有的值都是真值。这就是为什么-1被认为是true的原因。(https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - jobmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接