我曾在一些文章中读到,在某些语言中,如在JavaScript中,赋值运算符可用于条件语句。我想知道该操作背后的逻辑是什么?据我所知,在条件检查陈述中只允许使用比较运算符。
答案 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)
有两个因素结合起来产生这种效果:
left = right
形式的表达式会计算为新的left
。例如,a = b = c = 0
将a
,b
和c
的所有内容设置为零。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);
}