Javascript - 将 undefined 替换为 0

问题描述 投票:0回答:6

我有一个由用户输入定义的变量。我只想在它是

undefined
时替换它的值。但如果是
NaN
则不然。我该怎么办?

我尝试做

x || 0
但这也取代了
NaN
值。

javascript nullish-coalescing
6个回答
10
投票

您可以对

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
0
,则
null
将被设置为
undefined
,但不是任何其他值。您也可以在测试中使用
undefined
。简直一模一样啊

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

从你的问题来看,似乎有点像你专门寻找

number
元素,甚至
NaN
。如果您想将其限制为包括
NaN
在内的原始数字,请使用
typeof
进行测试。

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

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


10
投票

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

x ?? 0

??
是一个 空合并运算符:

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


2
投票

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

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

另一种方法是针对未定义测试严格相等:

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

在这种情况下,我们使用

void 0
作为安全措施,因为
undefined
实际上可以重新定义。


0
投票

您可以使用 typeof 和 isNaN 函数的组合来实现您想要的行为。这是一个例子:

if (typeof x === "undefined" || isNaN(x)) {
  x = defaultValue;
}

此代码检查 x 的值是否未定义或 NaN,如果是,则将其替换为默认值。请注意,isNaN 函数对于避免替换 NaN 值是必要的,因为 NaN 不等于其自身,因此无法使用通常的相等运算符进行比较。

或者,您可以使用 Number.isNaN 函数,这是检查 NaN 值的更新且更可靠的方法:

if (typeof x === "undefined" || Number.isNaN(x)) {
  x = defaultValue;
}

此代码的行为方式与前面的示例相同,但使用 Number.isNaN 函数而不是 isNaN。请注意,Number.isNaN 仅在较新的 JavaScript 版本(ES6 及更高版本)中可用。

我希望这有帮助!


-1
投票

您只需一个

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

-1
投票

您可以使用双波浪号 (~~) 按位 NOT 运算符

var a; // undefined
a = ~~a
console.log(a) // 0

它可以替代 (+),它也适用于未定义:

var a = "10";
a = ~~a
console.log(a) // 10
© www.soinside.com 2019 - 2024. All rights reserved.