条件中=符号(单个)的用途是什么?

时间:2015-02-01 09:00:02

标签: javascript if-statement conditional-statements assignment-operator

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

5 个答案:

答案 0 :(得分:1)

在JavaScript(和许多其他语言)中,当一个值被赋给一个变量时,值"返回"是分配给变量的值。因此,这样的语句可以用于以标准方式评估任何赋值的条件。

例如:

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

答案 1 :(得分:1)

使用 = 分配值会返回该值。如果结果是真实的或假的(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) ...

好处是更紧凑,简洁的代码,有时以牺牲清晰度为代价。

答案 2 :(得分:0)

这可用于进行条件检查,并在其后使用value,而无需写更多行。

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

这是有效的语法,但非常气馁。在很多语言中,这是明确禁止的,但有些语言也没有这个规则(例如C)。

答案 3 :(得分:0)

有两个因素结合起来产生这种效果:

  • 在许多语言(包括JavaScript)中,left = right形式的表达式会计算为新的left。例如,a = b = c = 0abc的所有内容设置为零。
  • 在许多语言中,包括JavaScript,可以使用各种值作为条件表达式。 if(7)相当于if(true);所以if(a = 7)相当于a = 7; if(true),而不是大概是if(a == 7)

答案 4 :(得分:0)

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

例如,您可以在if声明中使用数字:

if (1) { ... }

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

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

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

if (x = 1) { ... }

如果您指定的值应用于控制发生的情况,则在条件检查语句中使用赋值可能很有用。例如,如果你有一个为第一次调用返回不同值的函数,那么当没有更多值时,null可以在循环中使用它:

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

你可以通过与逻辑分离的赋值来做到这一点,但随后代码变得更加复杂:

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