gpt4 book ai didi

javascript - JS Array.prototype.filter with Array 扩展类构造函数调用

转载 作者:行者123 更新时间:2023-11-30 11:10:22 27 4
gpt4 key购买 nike

我有一个扩展类 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 是从哪里来的?

最佳答案

Array.prototype.filter 正在返回一个新的(数组)值。该值需要与原始数组具有相同的“类型”,即它必须是您的类的一个实例。

.filter 为您的类创建一个新的空实例:

1. Let O be ? ToObject(this value).
[...]
5. Let A be ? ArraySpeciesCreate(O, 0).
[...]

https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.prototype.filter

but why would it give me a 0 and not just no paramenter

因为规范说新数组是通过以 (length) 0 作为参数调用其构造函数创建的。

关于javascript - JS Array.prototype.filter with Array 扩展类构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53951271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com