gpt4 book ai didi

javascript - ES6 代理设置属性陷阱不触发数组长度

转载 作者:搜寻专家 更新时间:2023-11-01 04:30:01 25 4
gpt4 key购买 nike

使用 JavaScript ES6 代理时,array.length 的设置属性陷阱在直接分配数组索引时不会触发。

例如:

const proxy = new Proxy([], {
set: function(obj, name, value) {
console.log(`set: ${name}`);
obj[name] = value;
return true;
}
});
proxy.push(0);
proxy[1] = 1;

Chrome 51 和 Firefox 47 输出:

set: 0  set: length  set: 1

虽然我希望:

set: 0  set: length  set: 1  set: length 

这是符合规范的吗?我找不到这方面的任何信息。

最佳答案

将值分配给索引时,无需显式设置 length 属性。之所以用push设置,确实在specification中定义了:

  1. Repeat, while items is not empty

    a. Remove the first element from items and let E be the value of the element.

    b. Let setStatus be Set(O, ToString(len), E, true).

    c. ReturnIfAbrupt(setStatus).

    d. Let len be len+1.

  2. Let setStatus be Set(O, "length", len, true).

基本上:如果发生错误,则设置正确的长度以防数组已经扩展。

关于javascript - ES6 代理设置属性陷阱不触发数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37989238/

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