2014-12-05 41 views
-1

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

我试着做x || 0,但也取代了NaN值。

+1

'的typeof X === undefined'' – ajp15243 2014-12-05 16:15:57

+0

很快做到这一点,你可以展示你的代码,请。 – putvande 2014-12-05 16:17:06

+1

让我们来看看,如何检查是否有未定义的东西?这听起来像我可能会测试一些东西的声明!也许我可以尝试一个'if'语句。但是,情况会是怎样?也许这将是一个“平等”的条件,你知道,这是'==='。所以只是猜测,但也许'x === undefined'可以工作,或者完成'if'语句,if(x === undefined)'。那里,那并不难。 – 2014-12-05 16:19:45

回答

1

您可以对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将被设置为0,如果这是不是nullundefined,但没有任何其他价值。您也可以在测试中使用undefined。完全一样。

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

从你的问题,好像你一点点会专门找number元素,甚至NaN。如果您想将其限制为原始数字,包括NaN,则使用typeof进行测试。

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

但是,你会失去数字字符串,并且可以成功地转换为数字的其他值,所以这取决于你最终需要。

+0

如果我定义的变量如下: var x = parseFloat(self.y()); 在这种情况下,x总是成为NaN,不管x是未定义的还是NaN。有没有什么办法可以检查X是否未定义? – user3312508 2014-12-05 16:42:22

+0

@ user3312508:您只需使用'if'语句。你说如果'x'不是'undefined',那么你想运行'parseFloat(self.y());'部分并将它分配给'x',对吧? – 2014-12-05 16:45:12

1

您可以测试使用typeof(除其他事项外):

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

另一种方法是,以测试对未定义全等:

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

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

+1

*“,因为'undefined'实际上可以被重新定义。”*自ES5以来。 – 2014-12-05 16:23:03

+1

当然,但是作为一个实际问题,我几乎不建议让一个不知道如何写if语句的人混淆,以比较某些未定义的东西,比如void 0,以及它与实际上不存在的概率之间的关系'undefined'已被重新定义,这是我在十多年的JS编程中从未见过的东西。 – 2014-12-05 16:24:20

+1

@torazaburo:*“......我在JS编程的十多年中从未见过的东西”*你和我都是。让我感到奇怪的是,人们对全球“未定义”的重新定义或影子的迷恋,而不是其他全球定义的影子。 – 2014-12-05 16:28:45

0

你可以只用

x === undefined && (x = 0); 
+1

这是不好的语法,会失败大多数棉绒。 – 2014-12-05 16:20:26

+0

我接受linters会抱怨意外的任务,但我不明白为什么这是“糟糕的语法”。它利用了逻辑运算符可以短路的事实。 – 2014-12-05 16:23:53

+1

让缩小器做这种重写,其中大部分都会做。对于普通人来说,写if语句作为if语句。 – 2014-12-05 16:25:54