【发布时间】:2010-12-18 19:28:36
【问题描述】:
我遇到了以下行
hsb.s = max != 0 ? 255 * delta / max : 0;
? 和 : 在这种情况下是什么意思?
【问题讨论】:
标签: javascript syntax operators conditional-operator
我遇到了以下行
hsb.s = max != 0 ? 255 * delta / max : 0;
? 和 : 在这种情况下是什么意思?
【问题讨论】:
标签: javascript syntax operators conditional-operator
它被称为Conditional Operator(即ternary operator)。
格式为:condition ? value-if-true : value-if-false
将? 视为“then”,将: 视为“else”。
你的代码相当于
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
【讨论】:
addition 是对前后表达式进行运算的二元运算符(例如 1+2 加号对 1 和 2 进行运算),或者否定是一元运算符 (例如 -x ,其中 x 的值被否定)。
为了清楚起见,适当加括号,它是
hsb.s = (max != 0) ? (255 * delta / max) : 0;
表示返回任一
255*delta/max 如果最大值 != 00 如果最大值 == 0【讨论】:
用括号写成这样可能会更清楚一点:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
它所做的是评估第一个括号中的部分。如果结果为真,那么 ? 之后的部分在 : 返回之前。如果为 false,则返回 : 后面的内容。
【讨论】:
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;
}
【讨论】:
?: 是else {} 和if(){} 问题的简写条件。
所以你的代码可以互换:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
【讨论】:
? :这不是三元运算符吗?
var x= expression ? true:false
【讨论】:
您所指的称为ternary operator,它本质上是一个基本的if 条件检查,如果三元操作中的代码块有效,则可以编写它来执行操作,否则默认为回退.
三元运算的写法如下:
condition ? exprIfTrue : exprIfFalse
condition 一个表达式,其值用作条件。exprIfTrue 一个表达式,如果条件计算为 truthy 值(等于或可以转换为真),则计算该表达式。exprIfFalse 条件为falsy 时执行的表达式(即具有可以转换为假的值)。使用下面的给定函数,如果提供给函数的数字是偶数,则返回字符串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。【讨论】:
注意这一点。尽管 -1 != true 和 -1 != false,但 A -1 的计算结果为 true。相信我,我已经看到了。
所以
-1 ? “真面”:“假面”
评估为“真实的一面”
【讨论】: