jQuery inArray()的返回值

时间:2012-05-07 08:46:47

标签: javascript jquery

我正在阅读jQuery's documentation about the inArray method而我无法理解一句话的含义。如果该元素不在数组中,则该方法返回-1,否则返回0,则显示:

  

因为JavaScript将0视为松散等于false(即0 == false,但是0!== false),如果我们检查数组中是否存在值,我们需要检查它是否等于(或大于)-1。

我无法理解JavaScript将0视为松散等于false的事实与检查方法的返回值的需要有关。即使JavaScript不能以这种方式工作,我也不需要这样做吗?

6 个答案:

答案 0 :(得分:7)

这基本上意味着您需要像这样编写测试:

if ($.inArray(value, array) > -1) {
    // the element is inside the array
}

而不是:

if ($.inArray(value, array)) {
    // the element is inside the array
}

你不应该使用第二个结构的原因是因为如果值是数组的第一个元素,inArray函数将返回0(因为那是数组的第一个元素的索引)和正如文档0中所解释的那样,false

if (0) {
    // this will never run
}

答案 1 :(得分:6)

他们只是掩盖了 hideous 错误命名该函数 1 的背后。

换句话说,他们说你不能这样做:

if ($.inArray(a, b) == false) {
   // will fail if the element is in index 0
}

1 一个名为inArray的函数在逻辑上(没有双关语)应该返回一个布尔值,而不是一个位置。

答案 2 :(得分:3)

这只是意味着inArray应该真正命名为indexInArray

这使得0意味着它在第一个元素中找到了,而不是找不到它。

答案 3 :(得分:1)

他们告诉您不要检查0false还是null等'
如果值在数组的索引0中(== false)

,则会出现问题

检查值是否大于-1!=-1

问题示例:

if ($.inArray(20, [20]))
    // won't run the value is in index - 0

if ($.inArray(20, [20]) > -1)
    // Will run!

DEMO

答案 4 :(得分:1)

索引以0开头,因此0是一个有效值,例如

​var arr = ['foo']​​;
​console.log($.inArray('foo', arr));​​​​​

所以jQuery开发人员决定使用-1而不是false来防止明显的错误,如果开发人员检查值存在,如

if (!$.inArray(..))

答案 5 :(得分:1)

在javascript中0为false且1为True,或者您可以使用true或false。 零是数组的位置是数组的第一项。

如果你在if语句中进行比较,如果(0)它被认为是假的。

但你在数组上下文中的答案是项目处于零位。