我遇到的情况是我在数组中搜索某些内容,如果找到值,我会做一些事情。我这样做是通过将变量设置为undefined,然后在找到值时设置为找到的元素的索引。如果返回的值不是0,这将起作用,但如果它是0,则返回false。我该如何解决这个问题?
var index = undefined;
for(var i=0; i<ARRAY; i++)
{
if(CONDITION)
index = i;
}
if(index)
{
DO SOMETHING
}
所以当索引结果为零时我的问题就出现了,因为这返回了false。我想这样做的原因是因为我不确定它是否存在于数组中。
答案 0 :(得分:5)
如何测试结果以查看它是>= 0
而不是依赖于它的真实性?
if (index >= 0) { ... }
undefined
值不 >= 0
因此应该有效。
答案 1 :(得分:4)
为什么不100%明确?毕竟,这是你真正打算检查的内容:
if (typeof index === 'number')
{
// DO SOMETHING
}
我甚至更喜欢检查>= 0
,因为该运算符为非数字值提供了一些奇怪的结果:
Input | >= 0
------------
"1" | true
false | true
null | true
[] | true
"" | true
(有关证据,请参阅this jsFiddle。)
答案 2 :(得分:2)
0
在javascript中是假的;使用===
来测试值是否实际为假:
foo = 0;
foo == false //true
foo === false //false
当您将值设置为undefined
时,一种测试方法是查看值是否为非数字:
if (!isNaN(foo))
{
//foo is numeric
}
答案 3 :(得分:2)
您的意思是您有一个可能是undefined
或某个数字的变量,并且您希望undefined
能够与0
区分?
然后:
if (index) // wrong
if (index >= 0) // right
或者您可以使用类型感知比较:
if (index !== undefined) { .. }
答案 4 :(得分:2)
您可以使用-1表示在数组中找不到索引。正如您所提到的,如果您将其用作布尔值,则0将隐式转换为“false”。您可以使用===来避免隐式转换。
答案 5 :(得分:2)
你可以......不要这样做,因为你需要在JS的真实性定义中工作,或明确检查undefined
。