我正在阅读jQuery's documentation about the inArray method而我无法理解一句话的含义。如果该元素不在数组中,则该方法返回-1,否则返回0,则显示:
因为JavaScript将0视为松散等于false(即0 == false,但是0!== false),如果我们检查数组中是否存在值,我们需要检查它是否等于(或大于)-1。
我无法理解JavaScript将0视为松散等于false的事实与检查方法的返回值的需要有关。即使JavaScript不能以这种方式工作,我也不需要这样做吗?
答案 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)
他们告诉您不要检查0
是false
还是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!
答案 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)它被认为是假的。
但你在数组上下文中的答案是项目处于零位。