Javascript jQuery inArray()';s返回值
我在看书,一句话的意思我都听不懂。如果元素不在数组中,则该方法返回-1;否则返回0,则该方法读取: 因为JavaScript将0粗略地视为等于false(即0==false,但0!==false),如果我们要检查数组中是否存在值,我们需要检查它是否不等于(或大于)-1Javascript jQuery inArray()';s返回值,javascript,jquery,Javascript,Jquery,我在看书,一句话的意思我都听不懂。如果元素不在数组中,则该方法返回-1;否则返回0,则该方法读取: 因为JavaScript将0粗略地视为等于false(即0==false,但0!==false),如果我们要检查数组中是否存在值,我们需要检查它是否不等于(或大于)-1 我无法理解JavaScript将0松散地等同于false这一事实与检查方法返回值的需要有什么关系。即使JavaScript不是这样工作,我也需要这样做吗?他们告诉你不要检查0是否像false或null等 如果该值位于数组(=fal
我无法理解JavaScript将0松散地等同于false这一事实与检查方法返回值的需要有什么关系。即使JavaScript不是这样工作,我也需要这样做吗?他们告诉你不要检查
0
是否像false
或null
等如果该值位于数组(=false)的索引
0
中,则会出现问题
检查该值是否大于-1
或=-1
问题示例:
if ($.inArray(20, [20]))
// won't run the value is in index - 0
if ($.inArray(20, [20]) > -1)
// Will run!
这基本上意味着您需要这样编写测试:
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
}
索引以
0
开头,因此0
在以下情况下是有效值
var arr = ['foo'];
console.log($.inArray('foo', arr));
因此jQuery开发人员决定使用-1
而不是false
,以防止在开发人员检查值时出现明显错误,如
if (!$.inArray(..))
他们只是在掩盖对该功能可怕的错误命名 换句话说,他们说你不能做:
if ($.inArray(a, b) == false) {
// will fail if the element is in index 0
}
1名为
inArray
的函数在逻辑上(没有双关语)应该返回布尔值,而不是位置。在javascript中,0为false,1为True,或者可以使用True或false。
零是数组的位置,是数组的第一项
如果在if语句中比较if(0),则认为它为false
但是在数组的上下文中,您的答案是项目处于零位置。它只是意味着
inArray
应该真正命名为indexInArray
这使得
0
意味着在第一个元素中找到了它,而不是没有找到它。因此,我应该使用if(!$.inArray(..)
如果($.inArray(..)==-1)?@user1301428:如果(!$.inArray(..)
,这是不正确的,因为它将同时匹配0
和false
案例(如果jquery开发人员决定使用false
)。因此,是的,将其与-1
进行比较,以检查该值是否不存在于数组中。我同意该值的命名错误。从函数名可以清楚地看出,它返回一个布尔值。但它并没有返回布尔值。(有时我想扼杀其他开发人员。)我们都需要创建自己的库,以包含一个真正(没有双关语)返回布尔值的包装函数。