Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery inArray()';s返回值_Javascript_Jquery - Fatal编程技术网

Javascript jQuery inArray()';s返回值

Javascript 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

我在看书,一句话的意思我都听不懂。如果元素不在数组中,则该方法返回-1;否则返回0,则该方法读取:

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


我无法理解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
进行比较,以检查该值是否不存在于数组中。我同意该值的命名错误。从函数名可以清楚地看出,它返回一个布尔值。但它并没有返回布尔值。(有时我想扼杀其他开发人员。)我们都需要创建自己的库,以包含一个真正(没有双关语)返回布尔值的包装函数。