Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-将未定义替换为0_Javascript - Fatal编程技术网

Javascript-将未定义替换为0

Javascript-将未定义替换为0,javascript,Javascript,我有一个由用户输入定义的变量。我只想在它未定义时替换它的值。但如果是楠就不会了。我怎么做 我尝试了x | | 0,但这也替换了NaN值。您可以与未定义的值进行严格比较 if (x === undefined) { x = 0; } if (x === void 0) { x = 0; } 当然,您需要确保像往常一样正确地声明了x 如果您对undefined值被非常糟糕的代码(用新值覆盖)所困扰有任何敏感,那么您可以使用void操作符获得保证的undefined。您可以与und

我有一个由用户输入定义的变量。我只想在它未定义时替换它的值。但如果是楠就不会了。我怎么做


我尝试了
x | | 0
,但这也替换了NaN值。

您可以与
未定义的值进行严格比较

if (x === undefined) {
    x = 0;
}
if (x === void 0) {
    x = 0;
}
当然,您需要确保像往常一样正确地声明了
x

如果您对
undefined
值被非常糟糕的代码(用新值覆盖)所困扰有任何敏感,那么您可以使用
void
操作符获得保证的
undefined
。您可以与
undefined
值进行严格比较

if (x === undefined) {
    x = 0;
}
if (x === void 0) {
    x = 0;
}
void
的操作数无关紧要。不管你给它什么,它都会返回未定义的

这些都是等效的:

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

if (x === void "foobar") {
    x = 0;
}

if (x === void x) {
    x = 0;
}
最终,如果有人在本地压扁了
未定义的
(它不能再在全局压扁了),最好是修复那个坏代码


如果要同时检查
null
undefined
,并且只检查这些值,则可以使用
=
而不是
=

if (x == null) {
    x = 0;
}
现在,如果
x
null
未定义
,但不是任何其他值,则
x
将设置为
0
。您也可以在测试中使用
undefined
。完全一样

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

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

if (typeof x !== "number") {
    x = 0;
}
但是,您将丢失可以成功转换为数字的数字字符串和其他值,因此这取决于您最终需要什么。

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

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

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

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

只需一个

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

typeof x==='undefined'
您能展示一下您的代码吗。让我们看看,我该如何检查是否有未定义的内容?听起来我可能是在测试某个东西!也许我可以试试
if
语句。但条件是什么呢?也许这是一个“平等”条件,你知道,这是
==
。因此,只是猜测一下,但是可能
x===undefined
会起作用,或者要完成
if
语句,
if(x==undefined)
。在这里,这并不难。@blgt实际上,即使他不知道严格等式,他也可以只做
x==undefined
,希望他知道这一点,并且它会起作用,除了拾取null,这将是一个单独的问题,他可以在这里发布。:-)这是糟糕的语法,大多数linter都会失败。我承认linter会抱怨意外的赋值,但我不明白为什么这是“糟糕的语法”。它利用了逻辑运算符可以短路的事实。让迷你们做这种重写,大多数迷你们都会这样做。对于普通人,写一个if语句作为if语句。“因为
未定义的
实际上可以被重新定义。”不是从ES5开始。当然,但作为一个实际问题,我不建议混淆那些不知道如何编写if语句的人,以将某些内容与未定义的内容与arcana进行比较,例如
void 0
,以及它与几乎不存在的
undefined
被重新定义的概率的关系,这是我在JS编程的十多年中从未见过的东西。@torazaburo:“……这是我在JS编程的十多年中从未见过的东西”你和我。让我感到奇怪的是,人们痴迷于重新定义或隐藏未定义的全球
而不是任何其他全球
。我确实同意,但我将其包括在内,因为在过去几年中,至少在许多主要图书馆中,这似乎已成为标准做法,我认为提供常规解决方案比我碰巧喜欢的解决方案更有意义。我其实不是自己做的,我不想让你听起来像是我以为你对此很着迷。我想一个几乎必须包含一些“保护”版本,否则有人会发疯的。如果我将变量定义为:var x=parseFloat(self.y());在这种情况下,无论x是未定义的还是NaN,x总是变为NaN。有没有办法检查X是否未定义?@user3312508:您可以使用
if
语句。您的意思是,如果
x
不是
undefined
,那么您希望运行
parseFloat(self.y())零件并将其分配给
x
,对吗?