我有一个数组扩展类A,我想过滤它。似乎仅以0
作为参数调用了构造函数。为什么会这样?
以下是显示问题的示例:
class A extends Array {
constructor(...a){
console.log(a)
super(...a);
}
}
let a = new A("ok", "long");
let b = a.filter((e) => {
return e.length === 4;
});
console.log(b);
哪个日志:
[
"ok",
"long"
]
[
0
]
[
"long"
]
0是哪里来的?
答案 0 :(得分:3)
Array.prototype.filter
返回一个新的(数组)值。该值必须与原始数组具有相同的“类型”,即它必须是您的类的实例。
.filter
创建您的类的新的空实例:
1。让 O 为? ToObject(此值)。
[...]
5.让 A 为? ArraySpeciesCreate( O ,0)。
[...]
https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.prototype.filter
但是为什么会给我0而不是没有参数
因为该规范说新数组是通过以(length)0
作为参数调用其构造函数来创建的。