我有一个由用户输入定义的变量。我想在它未定义的情况下替换它的值。但不是如果它是NaN。我该怎么做?
我尝试过x || 0
,但这也取代了NaN值。
答案 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
(它不能再被全局压扁),那么修复错误的代码会更好。
如果您想同时检查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;
}
但是,您将丢失可成功转换为数字的数字字符串和其他值,因此这取决于您最终需要的内容。
答案 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