= 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 = 0
将 a
、b
和 c
全部设置为零。
- 在包括 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);
}
我在一些文章中读到,在某些语言中,例如 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 = 0
将a
、b
和c
全部设置为零。 - 在包括 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);
}