kgr*_*een 5 javascript ecmascript-6 es6-proxy
使用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;
Run Code Online (Sandbox Code Playgroud)
Chrome 51和Firefox 47输出:
set: 0 set: length set: 1
虽然我期望:
set: 0 set: length set: 1 set: length
这是按规格吗?我找不到任何关于此的信息.
length将值分配给索引时无需显式设置该属性。设置它的原因确实在规范push中定义了:
重复,当 items 不为空时
A。从 items 中删除第一个元素,并令 E 为该元素的值。
b. 令 setStatus 为 Set(O, ToString(len), E, true)。
C。ReturnIfAbrupt(setStatus)。
d. 令len 为len+1。
- 令 setStatus 为 Set(O, "length", len, true)。
基本上:如果发生错误,则设置正确的长度,以防数组已扩展。