Javascript Array.prototype.every在测试数组中的空值时返回true是否具有长度?

Javascript Array.prototype.every在测试数组中的空值时返回true是否具有长度?,javascript,arrays,Javascript,Arrays,我试图检查数组中的每个元素是否都有真实值 但当测试一个数组有一些空值时,我感到困惑 var arr=[]; arr[10]=1; arr;//[空x10,1]; arr.every(item=>Boolean(item));//真的吗??? 布尔值(arr[0]);//假的???!!! 这是我在ChromeDevTool控制台上运行上述代码时得到的结果 ,一些,映射,过滤器,大多数其他的只访问存在的数组项,它们不会访问像您这样的稀疏数组中的间隙。因此,结果仅基于检查实际存在的元素的值 您可以看

我试图检查数组中的每个元素是否都有真实值

但当测试一个数组有一些空值时,我感到困惑

var arr=[];
arr[10]=1;
arr;//[空x10,1];
arr.every(item=>Boolean(item));//真的吗???
布尔值(arr[0]);//假的???!!!
这是我在ChromeDevTool控制台上运行上述代码时得到的结果 ,
一些
映射
过滤器
,大多数其他的只访问存在的数组项,它们不会访问像您这样的稀疏数组中的间隙。因此,结果仅基于检查实际存在的元素的值

您可以看到,如果单步执行回调或向其添加日志记录:

var arr=[];
arr[10]=1;
arr.every((项目、索引)=>{
log(`vistedindex${index},item=${item}`);
返回布尔值(项目);
});
// =>
//访问索引10,项目=1
//请注意,0-9是间隙:
console.log(`0 in arr?${0 in arr}`);//假的
console.log(`9 in arr?${9 in arr}`);//假的

console.log(`10 in arr?${10 in arr}`);//true
大多数数组操作不会对稀疏数组中的未分配索引进行操作。从:

回调
仅对已分配 价值观它不会为已删除的索引调用,或者 从未分配过值

您只有一个赋值为truthy的索引,因此对
every()
的调用将返回true