我以前从未见过的比较运算符

Comparison operators that I haven't seen before

本文关键字:比较 运算符      更新时间:2023-09-26

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

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

具体来说,?之后是!。这是比较运算符吗?

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

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;
}

它是三元运算符。

value = condition ? <if condition is true statement> : <else statement>
x ? y : z

阅读以上内容:

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

或:

if x then y else z

!表示not。 它与?无关。 所以你看到的更像是这样的:

if x then (not y) else z
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 都不是 NaN 时!(x === y)等价于x !== y。 整体与

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";

因为x ? true : yx || y一样typeof 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。