请看下面的代码,数组过滤器显式返回true
可以去除数组空洞,为什么会这样?
const array = [0, null, '', undefined, , ,];
console.log(array);
// => [0, null, "", undefined, empty × 2]
array.filter(() => true);
// => [0, null, "", undefined]
最佳答案
因为,与其他数组方法一样,.filter
仅迭代直接位于数组对象上的属性。查看spec :
5. Let A be ? ArraySpeciesCreate(O, 0).
6. Let k be 0.
7. Let to be 0.
8. Repeat, while k < len
a. Let Pk be ! ToString(k).
b. Let kPresent be ? HasProperty(O, Pk). // <-----------------------------------
c. If kPresent is true, then
i. Let kValue be ? Get(O, Pk).
ii. Let selected be ! ToBoolean(? Call(callbackfn, T, « kValue, k, O »)).
iii. If selected is true, then
1. Perform ? CreateDataPropertyOrThrow(A, ! ToString(to), kValue).
2. Set to to to + 1.
d. Set k to k + 1.
9. Return A.
新创建的数组的最大长度
是原始数组上自己的数组索引属性的数量。
const array = [0, null, '', undefined, , ,];
console.log(array.hasOwnProperty('3'));
console.log(array.hasOwnProperty('4'));
关于javascript - 为什么 javascript `arr.filter(() => true)` 删除空洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58472289/