Javascript 如何使0返回真值?
在某种情况下,我在数组中搜索某个值,如果找到某个值,我就会执行某些操作。我是通过将一个变量设置为undefined来实现的,然后在找到该值时,将其设置为找到的元素的索引。如果返回的值不是0,这将起作用,但如果是0,则返回为false。我怎样才能解决这个问题Javascript 如何使0返回真值?,javascript,Javascript,在某种情况下,我在数组中搜索某个值,如果找到某个值,我就会执行某些操作。我是通过将一个变量设置为undefined来实现的,然后在找到该值时,将其设置为找到的元素的索引。如果返回的值不是0,这将起作用,但如果是0,则返回为false。我怎样才能解决这个问题 var index = undefined; for(var i=0; i<ARRAY; i++) { if(CONDITION) index = i; } if(index) { DO SOMETHING } va
var index = undefined;
for(var i=0; i<ARRAY; i++)
{
if(CONDITION)
index = i;
}
if(index)
{
DO SOMETHING
}
var指数=未定义;
对于(var i=0;i0
在javascript中为假;使用=
测试值是否为假:
foo = 0;
foo == false //true
foo === false //false
当您将该值设置为未定义时,一种测试方法是查看该值是否不是数字:
if (!isNaN(foo))
{
//foo is numeric
}
0
在javascript中为假;使用==
测试值是否为假:
foo = 0;
foo == false //true
foo === false //false
当您将该值设置为未定义时,一种测试方法是查看该值是否不是数字:
if (!isNaN(foo))
{
//foo is numeric
}
不如测试结果,看看它是否=0
,而不是依赖它的真实性
if (index >= 0) { ... }
未定义的
值是非=0
,因此应该可以工作。如何测试结果,看看它是否是=0
,而不是依赖它的真实性
if (index >= 0) { ... }
未定义的
值是而非=0
,因此应该可以工作。您的意思是您有一个变量可能是未定义的
或某个数字,并且希望未定义的
与0
区分开来
然后:
或者,您可以使用类型感知比较:
if (index !== undefined) { .. }
您的意思是您有一个变量可能是未定义的
或某个数字,并且希望未定义的
与0
区分开来
然后:
或者,您可以使用类型感知比较:
if (index !== undefined) { .. }
可以使用-1表示在数组中找不到索引。如前所述,如果将0像布尔值一样使用,则0将隐式转换为“false”。可以使用===避免隐式转换。可以使用-1表示在数组中找不到索引。如前所述,0将隐式转换为“false”如果你像布尔一样使用它。你可以使用===来避免隐式转换。你不能这样做,因为你需要在JS的真实性定义中工作,或者显式检查未定义的你可以…不这样做,因为你需要在JS的真实性定义中工作,或者显式检查对于未定义的为什么不100%明确?毕竟,这是您实际想要检查的:
if (typeof index === 'number')
{
// DO SOMETHING
}
我甚至更喜欢这样检查>=0
,因为该运算符对非数值给出了一些奇怪的结果:
Input | >= 0
------------
"1" | true
false | true
null | true
[] | true
"" | true
(有关证据,请参阅。)为什么不100%明确?毕竟,这是您实际想要检查的:
if (typeof index === 'number')
{
// DO SOMETHING
}
我甚至更喜欢这样检查>=0
,因为该运算符对非数值给出了一些奇怪的结果:
Input | >= 0
------------
"1" | true
false | true
null | true
[] | true
"" | true
(请参阅以获取证据。)显示您的测试用例,并定义所有这些“东西”s、 @Topener:不,不是;但是,两者都是假的。@hbtest你确定你不只是想使用这个函数吗?哇!这正是我需要和想要的。我对javascript不太熟悉,所以我不知道它存在。实际上它不起作用,我需要数组中某个对象的属性来匹配,而不是直接在arrayShow中的对象您的测试用例,并定义所有这些“东西”s、 @Topener:不,不是;但是,两者都是错误的。@hbtest你确定你不只是想使用这个函数吗?哇!这正是我需要和想要的。我对javascript不太熟悉,所以我不知道它存在。实际上它不起作用,我需要数组中某个对象的属性来匹配,而不是直接在数组中的对象但是OP说其他的元素是未定义的
,而不是假的
(虽然他显然可以像未定义的
一样容易地使用假的
)。@DanTao,自从我第一次发布我的简短回答以来,原来的问题已经发生了很大的变化。@zzzzBov:不,它说的是“未定义的
”因为它是第一次发布的。@TomalakGeret'kal,你是对的,我错了。我被一句话弄糊涂了:“如果返回的值不是0,那么这就行了,但是如果它是0,那么它就返回为false”.无论如何,我已经用另一种解决方案更新了我的答案。是的,但OP说其他元素是未定义的
,而不是错误的
(尽管他显然可以像未定义的
一样轻松地使用错误的
)@DanTao,自从我第一次发布我的简短回答以来,原来的问题已经发生了很大的变化。@ZZZBOV:不,自从第一次发布以来,它说的是“未定义”
。@TomalakGeret'kal,你是对的,我是错的。我被这句话弄糊涂了:“如果返回的值不是0,那么它会工作,但是如果它是0,那么它会返回为false。”。无论如何,我已经用另一种解决方案更新了我的答案。这解决了我的问题,但在看了其他答案后,我意识到我把问题复杂化了。我可以使用-1的java方式。@hbtest:当然,你也可以这样做。这不是这个问题的答案,但可以完全避免最初的问题。FWIW,我会使用<代码>未定义
:它更“遥远”从正数看,这比-1
更适合我作为非索引哨兵使用。我本来打算接受你的,但现在接受答案还为时过早。这解决了我的问题,但在看了其他答案后,我意识到这太复杂了。我可以使用-1的java方式。@hbtest:Sure、 你也可以这样做。这不是这个问题的答案,但它会完全避免最初的问题。FWIW,我会使用未定义的:它比-1
更“远离”正数,因此我觉得更适合用作非索引哨兵。我本来打算接受你的,但时间太早了