有人可以解释为什么以下代码将原因值设为false吗?
if (reason = "" || reason == null) {
return;
}
alert(reason);
答案 0 :(得分:7)
reason
将是false
,因为使用了 assignment 运算符:
reason = ...
^
└── assignment
优先级比||
和==
低。因此表达式:
"" || reason == null
将首先被评估为false
,以获取reason
或null
以外的undefined
的任何值,然后分配回reason
。
如果整个计算结果为false
,则内部返回将永远不会执行。
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
const test = (reason) => "" || reason == null;
console.log( test("something") );
console.log( test("") );
console.log( test(null) );
console.log( test(false) );
console.log( test(0) );
console.log( test(undefined) );
上面是“为什么要问” 的答案。但是由于赋值运算符可能是一个简单的错字,为了使代码更合理,您只需要使用两个比较(使用严格比较===
来防止意外的类型强制),例如:
if (reason === "" || reason === null) { // ...
答案 1 :(得分:0)
使用reason = ""
为原因变量分配值,请使用条件运算符reason == ""