A=b||“;foo”;;抱怨'b'是未定义的并且不将a分配给“”;foo”;.我错过了什么

A = b || "foo"; complains that 'b' is undefined and does not assign a to "foo". What am I missing?

本文关键字:foo 分配 错过了 什么 抱怨 未定义      更新时间:2023-09-26

在我的JavaScript代码和Chrome开发工具中,我编写了:

a = b || "foo";

得到这个错误:

ReferenceError: b is not defined

并且a未设置为"foo"。我知道这是JavaScript中的一个有效模式。我错过了什么?

如果bundefined,则您的模式正常。

如果变量b可能没有定义,那么尝试读取它是一个错误,因此它会稍微复杂一点:

a = typeof b!=="undefined" ? b : "foo";

即使知道变量已定义,也要小心使用b||something(这是最常见的情况):大多数情况下,您希望提供一个默认值来替换undefined,而不是阻止调用方传递0"",因此执行b!==undefined ? b : "foo"通常更安全。

这不是JavaScript中的有效模式。它仅在存在b的上下文中有效,例如

function test(b) {
    var a = b || "foo";
};