混淆了Array.isArray()和every()的组合

时间:2018-03-22 20:13:54

标签: javascript arrays

我试图通过使用every()函数检查目标对象中的每个元素是否为数组对象,代码如下:

let targetObj = [[1,2],[3],4];

let result = targetObj.every((val,index,arr)=>{
    return Array.isArray(val);
});

result是假的,因为4不是数组对象,但我发现如果我用Array.isArray替换回调函数仍然可以工作:

let result = targetObj.every(Array.isArray);

所以我的问题是:

1.这样,由于回调函数没有采用任何参数。为什么result仍然返回false

2. Array.isArray回调函数如何在不给出任何参数的情况下自动检查targetObj中的每个元素?

1 个答案:

答案 0 :(得分:0)

Array.isArray有一个参数。 每个(...)给出3个参数。

.every中的回调(不直接调用)将给出参数。 如果回调有超过3个参数,则下一个参数将被取消定义。

由于你没有打电话给回叫,所以每个人都在为你调用它,并且它会填补它的参数。