Javascript Array.prototype.find()异常行为
根据这一点,find()方法接受一个回调函数,该函数可以接受三个参数:当前数组元素、当前数组元素的索引和调用该方法的数组 因此: 如我所料,返回2 然而:Javascript Array.prototype.find()异常行为,javascript,arrays,find,Javascript,Arrays,Find,根据这一点,find()方法接受一个回调函数,该函数可以接受三个参数:当前数组元素、当前数组元素的索引和调用该方法的数组 因此: 如我所料,返回2 然而: var r = [2, 9, 11]; console.log(r.find(function(e, i, r) { if (e % 2 === 0) return i; })) 返回未定义(当我预期为0时) 及 返回2(当我期望[2,9,11]时) 有人能解释一下我没有正确理解的地方吗?您传递给.find()的回调
var r = [2, 9, 11];
console.log(r.find(function(e, i, r) {
if (e % 2 === 0)
return i;
}))
返回未定义(当我预期为0时)
及
返回2(当我期望[2,9,11]时)
有人能解释一下我没有正确理解的地方吗?您传递给
.find()
的回调被假定为返回布尔值(true或false)。从.find()
返回的值是回调返回非false值的第一个元素的值
在您的第一个示例中:
var r = [2, 9, 11]; console.log(r.find(function(e, i, r) {
if (e % 2 === 0)
return e; }))
返回值为2
不是因为返回e
返回值2
,但因为2
是真实的。您可以通过将return e
更改为return true
或任何其他truthy值来验证
类似地,在第二个示例中:
var r = [2, 9, 11];
console.log(r.find(function(e, i, r) {
if (e % 2 === 0)
return i;
}))
您的回调在第一个元素上返回0
(因为i
是0
),但这不是真的
find方法对每个元素执行一次回调函数
存在于数组中,直到找到回调返回true的数组为止
价值观
回调返回仅用于指示当前值是否应为结果。这有点像find
向回调函数询问当前值的“是或否”问题
在第二种情况下,2次通过e%2==0
,然后返回i
。但是i
是0
,这是一个错误的值,因此find
跳过该值并继续。其他值(9和11)不通过e%2==0
。不显式返回值的函数返回一个未定义的
,一个伪值。最后,没有回调返回truthy值,find
返回undefined
第三种情况是,2
通过e%2===0
,然后返回r
,一个数组,它是真实值。这使得find
,立即返回第一项,即2
var r = [2, 9, 11]; console.log(r.find(function(e, i, r) {
if (e % 2 === 0)
return e; }))
var r = [2, 9, 11];
console.log(r.find(function(e, i, r) {
if (e % 2 === 0)
return i;
}))