3

我正在阅读有关 inArray 方法的 jQuery 文档,但我无法真正理解一句话的含义。如果元素不在数组中,则该方法返回 -1,否则返回 0,其内容如下:

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

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

4

6 回答 6

8

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

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
}
于 2012-05-07T08:50:14.130 回答
6

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

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

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

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

于 2012-05-07T08:51:04.053 回答
3

它只是意味着inArray应该真的被命名indexInArray

这使得它0意味着它在第一个元素中被发现,而不是它没有被发现。

于 2012-05-07T09:01:27.553 回答
1

他们告诉你不要检查0它是否像falsenull等等'
如果值在0数组的索引中(== false)将是一个问题

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

问题示例:

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

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

演示

于 2012-05-07T08:50:05.487 回答
1

索引以 开头0,因此0在这种情况下是有效值

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

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

if (!$.inArray(..))
于 2012-05-07T08:50:45.750 回答
1

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

如果你在 if 语句中比较 if(0) 它被认为是错误的。

但是您在数组上下文中的答案是该项目位于零位置。

于 2012-05-07T08:53:20.890 回答