=符号(单)在条件中有什么用?

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

提问人:Neerkoli 提问时间:2/1/2015 更新时间:2/1/2015 访问量:125

问:

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

javascript if- 条件语句 赋值运算符

评论


答:

1赞 Sinkingpoint 2/1/2015 #1

在 JavaScript(和许多其他语言)中,当一个值被赋给一个变量时,值“returned”是赋给一个变量的值。因此,这样的语句可以在以标准方式计算任何赋值的条件下使用。

例如:

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

评论

0赞 Neerkoli 2/1/2015
谢谢:)但我还是不明白。在这里,我们分配一个值,而不是比较。
0赞 meskobalazs 2/1/2015 #2

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

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

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

评论

0赞 Neerkoli 2/1/2015
所以在这里,要么值是布尔变量,要么我们只是检查值是零还是非零值,对吧?
0赞 meskobalazs 2/1/2015
我们正在检查返回值是否真实sitepoint.com/javascript-truthy-falsy
1赞 ruakh 2/1/2015 #3

有两个因素结合在一起产生了这种效果:

  • 在许多语言(包括 JavaScript)中,表单的表达式计算结果为 new .例如,将所有 、 和 设置为零。left = rightlefta = b = c = 0abc
  • 在包括 JavaScript 在内的许多语言中,各种值都可以用作条件表达式。 等价于 ;所以等同于而不是推测的意图。if(7)if(true)if(a = 7)a = 7; if(true)if(a == 7)

评论

0赞 Neerkoli 2/1/2015
谢谢你的解释:)所以这些类型的评估只能在零和非零比较的情况下进行,对吧??
0赞 ruakh 2/2/2015
@BlackPanda:对不起,我不太明白你的问题。在 JavaScript 中,任何值都可以用作条件表达式; 手段 , 手段 , 手段 , 手段 , 等等。因此,此问题可能会影响任何比较;如果你不小心输入了 ,那永远不会给你一个错误 - 它只是不会做你想做的事。if({})if(true)if(new Object())if(true)if("")if(false)if(null)if(false)if(... = ...)if(... == ...)
0赞 ruakh 2/2/2015
@BlackPanda:其实,等等,我想我明白了你的困惑。澄清一下:中没有逻辑。这不是语言的故意特征。只是赋值表达式的计算结果为一个值,并且可以使用任何值;所以最终成为法律代码(含义相同),即使它几乎从来都不是你想要的。你明白我的意思吗?if (a = b)a = bif (...)if (a = b) { ... }a = b; if (a) { ... }
0赞 Neerkoli 2/2/2015
是的,非常清楚。:)感谢您指出这不是该语言的故意特征。但现在我的怀疑扩大了这个问题的范围。:p无论如何。
1赞 Hurelu 2/1/2015 #4

将值分配为 = 将返回该值。您可以使用它在测试结果是真还是假(null、0、“”未定义、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) ...

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

1赞 Guffa 2/1/2015 #5

条件检查语句中允许使用任何表达式。如果表达式的值不是布尔值,则它将转换为布尔值以确定语句应执行的操作。

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

if (1) { ... }

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

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

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

if (x = 1) { ... }

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

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

你可以将赋值与逻辑分开来做到这一点,但这样代码就会变得更加复杂:

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