如何让0返回true?

时间:2011-10-10 16:19:36

标签: javascript

我遇到的情况是我在数组中搜索某些内容,如果找到值,我会做一些事情。我这样做是通过将变量设置为undefined,然后在找到值时设置为找到的元素的索引。如果返回的值不是0,这将起作用,但如果它是0,则返回false。我该如何解决这个问题?

var index = undefined;
for(var i=0; i<ARRAY; i++)
{
  if(CONDITION)
     index = i;
}
if(index)
{
  DO SOMETHING
}

所以当索引结果为零时我的问题就出现了,因为这返回了false。我想这样做的原因是因为我不确定它是否存在于数组中。

6 个答案:

答案 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