JavaScript中的问号和冒号
我遇到了下面这一行JavaScript中的问号和冒号,javascript,syntax,operators,conditional-operator,Javascript,Syntax,Operators,Conditional Operator,我遇到了下面这一行 hsb.s = max != 0 ? 255 * delta / max : 0; ?和:在本文中是什么意思?:
hsb.s = max != 0 ? 255 * delta / max : 0;
?
和:
在本文中是什么意思?:这不是三元运算符吗
var x=表达式?真:假
为清晰起见,正确地加上括号,它是
hsb.s = (max != 0) ? (255 * delta / max) : 0;
也就是说返回
255*delta/max
if max!=0
0
如果max==0
如果用括号写的话,可能会更清楚一些,如下所示:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
它所做的是评估第一个括号中的零件。如果结果是真的,那么后面的部分是什么?在:返回之前。如果为false,则返回:后面的内容。它被称为(这是一个)
其形式为:条件
<代码>值(如果为真)
:值(如果为假)
把
?
想象成“then”,把:
想象成“else”
您的代码相当于
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
?
是一个三元运算符。如果与:
=代码>表示不相等
所以,这条线的长形式是
if (max != 0) { //if max is not zero
hsb.s = 255 * delta / max;
} else {
hsb.s = 0;
}
小心这个。虽然-1!=真与-1!=错。相信我,我亲眼目睹了这一切
所以
-1号?“真实面”:“虚假面”
计算结果为“true side”?:是else{}
和if(){}
问题的简写条件。
因此,您的代码可以互换为:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
“?”不是三元运算符;“?:”是三元运算符。谈论“?”作为三元运算符就像谈论没有Costello的Abbott、没有Hardy的Laurel、没有Chong的Cheech……好吧,好吧。。。现在我用了一个模棱两可的代词,happy?:)迂腐地说,这是一个三元运算符,它恰好是大多数编程语言中唯一的一个。任何作用于三个部分的运算符都是三元运算符,就像加法是作用于前面和后面表达式的二元运算符一样(例如,1+2加号作用于1和2),或者求反是一元运算符(例如,-x,其中x的值为反)@Davy8:这一个可以被称为是具体的。如果你想检查两个条件呢?这是一个使用它的例子,但实际上有一个简短的版本,对于那些你只需要真/假的情况:如果“表达式”只是一个带有数字或字符串的变量,“var x=!!expression”“在JavaScript中,truthy值是在布尔上下文中计算时被视为true的值。所有值都是truthy,除非它们被定义为falsy(即,除false、0、”、null、未定义和NaN之外)。”这就是-1被计算为true的原因。()
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}