我有一个由用户输入定义的变量。我只想在它未定义时替换它的值。但如果是 NaN 则不是。我该怎么做?
我尝试这样做,x || 0但这也替换了 NaN 值。
小智 10
对于 ES6 用户,你可以简单地执行以下操作:
x ?? 0
Run Code Online (Sandbox Code Playgroud)
??是一个Nullish 合并运算符:
一个逻辑运算符,当其左侧操作数为 null 或未定义时,返回其右侧操作数,否则返回其左侧操作数。
您可以对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如果它是null或undefined,但不是任何其他值。您也可以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)
但是,您将丢失可以成功转换为数字的数字字符串和其他值,因此这取决于您最终需要什么。