Javascript =符号(单个)在条件中有何用途?

Javascript =符号(单个)在条件中有何用途?,javascript,if-statement,conditional-statements,assignment-operator,Javascript,If Statement,Conditional Statements,Assignment Operator,我在一些文章中读到,在一些语言中,比如JavaScript,赋值运算符可以用于条件语句。我想知道那次行动背后的逻辑是什么?据我所知,在条件检查语句中只允许使用比较运算符。在JavaScript(和许多其他语言)中,当一个值分配给变量时,“returned”值就是分配给变量的值。因此,这种语句可以在任何赋值都以标准方式计算的条件下使用 例如: var y = 0; if(x = y){ alert("Y(and thus X) is Truthy"); } else{ alert(

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

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

例如:

var y = 0;
if(x = y){
    alert("Y(and thus X) is Truthy");
}
else{
    alert("Y(and thus X) is Falsy");
}
在JavaScript(和许多其他语言)中,当一个值分配给一个变量时,“返回”的值就是分配给变量的值。因此,这种语句可以在任何赋值都以标准方式计算的条件下使用

例如:

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

这可以用于进行条件检查,也可以在其后面使用
,而无需写入更多行

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

这是一种有效的语法,但不鼓励使用。在相当多的语言中,这是明确禁止的,但有些语言也不制定这一规则(例如C)。

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

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

这是一种有效的语法,但不鼓励使用。在相当多的语言中,这是明确禁止的,但有些语言也没有制定这一规则(例如C)。

有两个因素共同作用,产生了这种效果:

  • 在许多语言中,包括JavaScript,形式为
    left=right
    的表达式计算结果为新的
    left
    。例如,
    a=b=c=0
    将所有
    a
    b
    c
    设置为零
  • 在许多语言中,包括JavaScript,各种各样的值都可以用作条件表达式
    if(7)
    相当于
    if(true)
    ;所以
    如果(a=7)
    等于
    a=7;if(true)
    而不是假定的
    if(a==7)

有两个因素共同产生这种效果:

  • 在许多语言中,包括JavaScript,形式为
    left=right
    的表达式计算结果为新的
    left
    。例如,
    a=b=c=0
    将所有
    a
    b
    c
    设置为零
  • 在许多语言中,包括JavaScript,各种各样的值都可以用作条件表达式
    if(7)
    相当于
    if(true)
    ;所以
    如果(a=7)
    等于
    a=7;if(true)
    而不是假定的
    if(a==7)

将值赋值为=将返回该值。您可以使用它在测试结果是真还是假(null、0、“未定义、NaN、false)时进行赋值

这会在测试myArgument时将myArgument指定给myVar。另一个更具体的例子:

If (myVar = 3+2) ...
// same as:
// myVar=3+2;
// if (5) ...

这样做的好处是代码更简洁,有时会以清晰度为代价。

使用=赋值返回该值。您可以使用它在测试结果是真还是假(null、0、“未定义、NaN、false)时进行赋值

这会在测试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);
}

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

例如,您可以在
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);
}

谢谢你的解释:)所以这些类型的评估只能在零和非零比较的情况下进行,对吗???@BlackPanda:对不起,我不太理解你的问题。在JavaScript中,任何值都可以用作条件表达式
if({})
表示
if(true)
if