= vs === 运算符用于布尔表达式

= vs === operator for Boolean expressions

同样,这将是一个新手问题,我只是想弄清楚 javascript 如何解释布尔表达式。

好吧,我有以下代码:

var boolean = true;
while(boolean){
boolean === false;
};

由于使用了相同的 === 运算符,这将进入无限循环。这是因为 javascript 在使用 shorthand 表达式 while(boolean) 时将布尔表达式 "true" 存储为数字“1”。那么 while(boolean) 实际上被解释为 while(boolean === 1) 而不是 while(boolean === true)?

= 是赋值运算符。写作

var bool = false;

表示"set the variable named 'bool' to 'false'"

而 === 是一个严格的相等运算符。写作

bool === false;

检查变量 'bool' 是否包含准确的值 'false'。意思是"Does the variable 'bool' hold the value 'false'?"

它会 return 一个布尔值:如果布尔值为 false,则为 true,否则为 false。在这种情况下,它 return 是正确的。

它进入了一个无限循环,因为 'bool' 永远不会改变值。要将其设置为 true,请使用 =

bool = true;

Is this because javascript stores the boolean expression "true" as digit "1" while using the shorthand expression while(boolean).

没有

So is while(boolean) actually interpreted as while(boolean === 1) rather than while(boolean === true)?

没有

它会永远循环下去,因为您没有做任何更改循环内 boolean 变量值的事情。行

boolean === false;

...没有效果;你正在做一个比较而不是将它的结果存储在任何地方。

您似乎混淆了 ====。他们做完全不同的事情。这是一个纲要:

  • = 赋值运算符 。这是你用来给事物赋值的东西。 boolean = true; 将值 true 分配给变量 boolean

  • === 严格相等运算符 。它用于查看两个事物是否严格相等 ("strictly" = "without type coercion")。因此 a === b 计算 true 如果 ab 包含具有相同类型的等价值。

  • == 松散相等运算符 。它用于查看两个事物是否大致相等 ("loosely" = "with type coercion")。因此 a == b 将计算 true 如果 a === b 为真 如果 ab 具有不同的类型但类型强制可以将一个或另一个转换为另一个的类型。 (这个规则很复杂,但是例如 "" == 0 评估 true 因为 "" 强制转换为 0。)