以下javascript代码将原​​因值设为false

Bhi*_*nni 2 javascript

有人可以解释为什么以下代码将原因值设为false吗?

if (reason = "" || reason == null) {
  return;
}
alert(reason);
Run Code Online (Sandbox Code Playgroud)

Yos*_*shi 7

reasonfalse(在大多数情况下),该代码段后,因为赋值操作符使用:

reason = ...
       ^
       ??? assignment
Run Code Online (Sandbox Code Playgroud)

具有较低的优先级||==。因此表达式:

"" || reason == null
Run Code Online (Sandbox Code Playgroud)

将首先被评估,false其值为或reason以外的任何其他值,然后分配回。nullundefinedreason

如果整个计算结果为false,则内部返回将永远不会执行。


参考:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence


reason = ...
       ^
       ??? assignment
Run Code Online (Sandbox Code Playgroud)


以上是对“为什么问题”的回答。但是由于赋值运算符可能是一个简单的错字,为了使代码更合理,您只需要使用两个比较(使用严格比较===以防止意外的类型强制),例如:

if (reason === "" || reason === null) { // ...
Run Code Online (Sandbox Code Playgroud)