if子句中的赋值运算符赋值并执行检查

Assignment operator inside if clause assigns value and performs check?

本文关键字:执行 检查 赋值 赋值运算符 子句 if      更新时间:2023-09-26

我在调试代码时注意到了一些问题。

if(array.length=5){
    console.log("it's 5 units long");
}

这不仅使数组大小为5(假设它每次都执行赋值),而且还执行if中的检查,从而产生控制台输出。这在Javascript中是正常行为吗?这是任何真实场景的有效缩写吗?

赋值表达式的结果是新值。您的代码相当于:

array.length = 5;
if (5) {
    console.log("it's 5 units long");
}

5是一个真值,因此条件通过。

以下值总是错误的:

  • false
  • 0(零)
  • ""(空字符串)
  • null
  • undefined
  • NaN(一个特殊的Number值,意思是没有数字!)

所有其他值都是truthy,包括"0"(引号中的零)、"false"(引号中为false)、空函数、空数组和空对象。

我可以设计一些有用的场景,但一般来说,不,它没有用处。至少,这是一种糟糕的风格,即使可以使用也不应该使用。