提问人:Neerkoli 提问时间:2/1/2015 更新时间:2/1/2015 访问量:125
=符号(单)在条件中有什么用?
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)中,表单的表达式计算结果为 new .例如,将所有 、 和 设置为零。
left = right
left
a = b = c = 0
a
b
c
- 在包括 JavaScript 在内的许多语言中,各种值都可以用作条件表达式。 等价于 ;所以等同于而不是推测的意图。
if(7)
if(true)
if(a = 7)
a = 7; if(true)
if(a == 7)
评论
if({})
if(true)
if(new Object())
if(true)
if("")
if(false)
if(null)
if(false)
if(... = ...)
if(... == ...)
if (a = b)
a = b
if (...)
if (a = b) { ... }
a = b; if (a) { ... }
将值分配为 = 将返回该值。您可以使用它在测试结果是真还是假(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) ...
这样做的好处是代码更紧凑、更简洁,有时以牺牲清晰度为代价。
条件检查语句中允许使用任何表达式。如果表达式的值不是布尔值,则它将转换为布尔值以确定语句应执行的操作。
例如,您可以在语句中使用数字: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);
}
上一个:如果语句始终执行
下一个:为什么我不能为另一个类拉取方法?
评论