Javascript - 用 0 替换 undefined

use*_*508 3 javascript

我有一个由用户输入定义的变量。我只想在它未定义时替换它的值。但如果是 NaN 则不是。我该怎么做?

我尝试这样做,x || 0但这也替换了 NaN 值。

小智 10

对于 ES6 用户,你可以简单地执行以下操作:

x ?? 0
Run Code Online (Sandbox Code Playgroud)

??是一个Nullish 合并运算符

一个逻辑运算符,当其左侧操作数为 null 或未定义时,返回其右侧操作数,否则返回其左侧操作数。


six*_*man 6

您可以对undefined值进行严格比较。

if (x === undefined) {
    x = 0;
}
Run Code Online (Sandbox Code Playgroud)

自然地,您会希望确保x已像往常一样正确声明。

如果您对undefined被非常糟糕的代码(被新值覆盖)困扰的值有任何敏感性,那么您可以使用void运算符来获得一个有保证的undefined.您可以对undefined值进行严格的比较。

if (x === void 0) {
    x = 0;
}
Run Code Online (Sandbox Code Playgroud)

操作数void无关紧要。不管你给它什么,它都会回来的undefined

这些都是等价的:

if (x === void undefined) {
    x = 0;
}

if (x === void "foobar") {
    x = 0;
}

if (x === void x) {
    x = 0;
}
Run Code Online (Sandbox Code Playgroud)

最终,如果有人undefined在本地压缩(它不能再全局压缩了),最好修复那个糟糕的代码。


如果你想同时检查null,并undefined在同一时间,只有那些价值,你可以用==代替===

if (x == null) {
    x = 0;
}
Run Code Online (Sandbox Code Playgroud)

Nowx将设置为,0如果它是nullundefined,但不是任何其他值。您也可以undefined在测试中使用。完全一样。

if (x == undefined) {
    x = 0;
}
Run Code Online (Sandbox Code Playgroud)

从您的问题来看,您似乎在专门寻找number元素,甚至NaN. 如果您想将其限制为包括 的原始数字NaN,则typeof用于测试。

if (typeof x !== "number") {
    x = 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,您将丢失可以成功转换为数字的数字字符串和其他值,因此这取决于您最终需要什么。