= sign (single) 在条件中的用途是什么?

What is the use of = sign (single) in a condition?

我在一些文章中读到,在某些语言中,例如 JavaScript,可以在条件语句中使用赋值运算符。我想知道那个操作背后的逻辑是什么?据我所知,条件检查语句中只允许使用比较运算符。

在 JavaScript(以及许多其他语言)中,当一个值被分配给一个变量时,值 "returned" 就是被分配给一个变量的值。因此,可以在以标准方式评估任何赋值的条件下使用此类语句。

例如:

var y = 0;
if(x = y){
    alert("Y(and thus X) is Truthy");
}
else{
    alert("Y(and thus X) is Falsy");
}

这可以用来进行条件检查,也可以在它后面使用 value,而无需写更多行。

if (value = someFunction()) {
    ...
}

这是有效的语法,但强烈建议不要使用。在相当多的语言中,这是明确禁止的,但有些语言也没有制定此规则(例如 C)。

有两个因素共同产生了这种效果:

  • 在许多语言中,包括 JavaScript,<em>left</em> = <em>right</em>[ 形式的表达式=31=] 的计算结果为新的 <code><em>left</em>。例如,a = b = c = 0abc 全部设置为零。
  • 在包括 JavaScript 在内的许多语言中,可以将各种值用作条件表达式。 if(7)等同于if(true);所以 if(a = 7) 等同于 a = 7; if(true) 而不是假定的 if(a == 7).

= returns 赋值。您可以在测试结果是真还是假时使用它进行赋值 (null, 0, "" undefined, NaN, false)

if (myVar = myArgument) ...
//same as:
// myVar=myArgument;
// if (myArgument) ...

这将在测试 myArgument 时将 myArgument 分配给 myVar。另一个更具体的例子:

If (myVar = 3+2) ...
// same as:
// myVar=3+2;
// if (5) ...

好处是代码更紧凑、简洁,但有时会牺牲清晰度。

条件检查语句中允许任何表达式。如果表达式的值不是布尔值,那么它将被转换为布尔值以确定语句应该做什么。

例如,您可以在 if 语句中使用数字:

if (1) { ... }

任何非零数字将被转换为 true

在 Javascript 中,赋值也是一个表达式,即它有一个值。表达式的值与分配给变量的值相同。

因此,您可以在条件检查语句中使用赋值表达式,并在需要时将表达式的值转换为布尔值:

if (x = 1) { ... }

如果您分配的值应该用于控制发生的情况,则在条件检查语句中使用赋值会很有用。例如,如果你有一个函数,第一次调用时 returns 不同的值,然后 null 当没有更多值时,你可以在循环中使用它:

while (line = getLine()) {
  document.write(line);
}

你当然可以将赋值从逻辑中分离出来,但这样代码会变得更复杂:

while (true) {
  line = getLine();
  if (line == null) break;
  document.write(line);
}