3

我正在尝试破译以下 JavaScript 代码行:

delay_start = (typeof delay_start_qs !== "undefined") ? !(delay_start_qs === "false") : true;

具体?!. 那是比较运算符吗?

4

4 回答 4

2

它是一个简单的三元运算符

delay_start = (typeof delay_start_qs !== "undefined") 
                                ? !(delay_start_qs === "false") : true;

让我们打破它..

(typeof delay_start_qs !== "undefined")// 如果 delay_start_qs 未定义

如果上述条件为真,那么 delay_start = !(delay_start_qs === "false") ;

否则 delay_start = true;

同样可以写成for循环

if(typeof delay_start_qs !== "undefined") {
    delay_start = !(delay_start_qs === "false") ;
} else {
    delay_start = true;
}
于 2013-09-12T23:00:24.347 回答
2

这是三元运算符。

value = condition ? <if condition is true statement> : <else statement>
于 2013-09-12T23:01:24.770 回答
2
x ? y : z

将以上内容阅读为:

if(x) {
  y;
} else {
  z;
}

或者:

if x then y else z

!手段not。_ 它与?. 所以你看到的更像是这样的:

if x then (not y) else z
于 2013-09-12T23:03:31.167 回答
0
delay_start = (typeof delay_start_qs !== "undefined") ? !(delay_start_qs === "false") : true;

是相同的

delay_start = (typeof delay_start_qs !== "undefined") ? delay_start_qs !== "false" : true;

因为!(x === y)等效于x !== y当 x 和 y 都不是 NaN 时。和整体是一样的

delay_start = (typeof delay_start_qs === "undefined") ? true : delay_start_qs !== "false";

因为x ? y : z是一样的!x ? z : y。和整体是一样的

delay_start = (typeof delay_start_qs === "undefined") || delay_start_qs !== "false";

因为与whenx ? true : y相同。和整体是一样的x || ytypeof x === "boolean"

if (typeof delay_start_qs === "undefined" || delay_start_qs !== "false") {
  delay_start = true;
} else {
  delay_start = false;
}

因为a = x ? y : z;是一个使用 x 来决定将 y 或 z 中的哪一个分配给 a 的语句。

于 2013-09-12T23:05:25.470 回答