Javascript - 将undefined替换为0

时间:2014-12-05 16:14:15

标签: javascript

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

我尝试过x || 0,但这也取代了NaN值。

4 个答案:

答案 0 :(得分:2)

您可以对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(它不能再被全局压扁),那么修复错误的代码会更好。


如果您想同时检查nullundefined,并且只检查这些值,则可以使用==代替===

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

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

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

从您的问题来看,它似乎有点像您专门寻找number元素,甚至是NaN。如果您想将其限制为包含NaN的原始数字,请使用typeof进行测试。

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

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

答案 1 :(得分:1)

您可以使用typeof(以及其他内容)进行测试:

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

另一种方法是测试与undefined的严格相等:

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

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

答案 2 :(得分:0)

只需

即可快速完成此操作
x === undefined && (x = 0);

答案 3 :(得分:0)

对于 ES6 用户,您可以简单地

x ?? 0