3

我有一个由用户输入定义的变量。我只想替换它的值,如果它是undefined. 但如果是NaN. 我该怎么做?

我试过这样做x || 0,但这也取代了NaN价值观。

4

5 回答 5

7

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

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

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

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

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

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

这些都是等价的:

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

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

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

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


如果您想同时检查两者,null并且undefined只检查那些值,您可以使用==代替===.

if (x == null) {
    x = 0;
}

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

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

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

if (typeof x !== "number") {
    x = 0;
}

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

于 2014-12-05T16:17:30.450 回答
1

您可以使用 typeof 进行测试(除其他外):

if (typeof x == 'undefined') x = y;

另一种方法是针对 undefined 测试严格相等性:

if (x === void 0) x = y

在这种情况下,我们将void 0其用作安全性,因为undefined实际上可以重新定义。

于 2014-12-05T16:17:52.330 回答
1

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

x ?? 0

??Nullish 合并运算符

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

于 2021-07-01T12:08:23.120 回答
0

只需一个

x === undefined && (x = 0);
于 2014-12-05T16:19:37.923 回答
0

男生。也许你可以试试这个,你好,男孩。也许你可以试试这个,你好,男孩。也许你可以试试这个,你好,男孩。也许你可以试试这个,你好,男孩。也许你可以试试这个

var a;//undefined
a = ~~a
console.log(a)//0
于 2021-10-20T12:43:57.380 回答