我看到了下面这行
hsb.s = max != 0 ? 255 * delta / max : 0;
在这个上下文中,?和:是什么意思?
?
:
? :这不是三元操作符吗?
? :
var x= expression ? true:false
为了清楚起见,它是
hsb.s = (max != 0) ? (255 * delta / max) : 0;
也就是返回
255*delta/max
0
用括号写出来可能会更清楚一些:
它所做的是计算第一个括号里的部分。如果结果为真,那么?在:之前返回。如果为false,则返回:后面的内容。
它被称为条件运算符(它是一个三元运算符)。
它的形式是:condition ?value-if-true: value-if-false 将?视为"then",将:视为"else"
condition
value-if-true
value-if-false
你的代码相当于
if (max != 0) hsb.s = 255 * delta / max; else hsb.s = 0;
?是一个三元操作符。它的工作原理类似于if与:的结合
if
!=表示不等于
!=
所以这条直线的长形式是
if (max != 0) { //if max is not zero hsb.s = 255 * delta / max; } else { hsb.s = 0; }
小心这个。虽然-1 !=真,-1 !=假,但A -1的计算结果为真。相信我,我亲眼所见。
所以
1 ?“真边”:“假边”
评估为“真侧”
else {}
if(){}
if(max != 0){ hsb.s = 225 * delta / max } else { hsb.s = 0 }
MDN -条件(三元)运算符
你所引用的被称为三元运算符,它本质上是一个基本的if条件检查,如果三元操作中的代码块有效,可以编写它来执行操作,否则默认为回退。
三元运算的语法如下:
condition ? exprIfTrue : exprIfFalse
exprIfTrue
exprIfFalse
取下面给出的函数,如果提供给函数的数字是偶数,则返回字符串Yes,否则返回No。
Yes
No
function isEven(num) { return (num % 2 == 0) ? "Yes" : "No"; } console.log("2: " + isEven(2)); console.log("3: " + isEven(3));
上述操作分为:
(num % 2 == 0)
? "Yes"
: "No"
else