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
,对吗?