使用JavaScript ES6 Proxies时,直接分配数组索引时不会触发array.length的set属性陷阱。
例如:
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
这是符合规格吗?我无法找到有关此事的任何信息。
答案 0 :(得分:2)
将值分配给索引时,无需显式设置length
属性。它push
设置的原因确实在specification中定义:
重复,而项目不为空
一个。从项中删除第一个元素,让E为元素的值。
湾设setStatus为Set(O,ToString(len),E,true)。
℃。 ReturnIfAbrupt(setStatus)。
d。让len为len + 1.
- 设置setStatus(O,"长度",len,true)。
醇>
基本上:如果发生错误,则设置正确的长度,以防数组已经扩展。