ES6代理集属性陷阱未针对数组长度触发

时间:2016-06-23 10:37:55

标签: 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;

Chrome 51和Firefox 47输出:

set: 0  
set: length  
set: 1

虽然我希望:

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

这是符合规格吗?我无法找到有关此事的任何信息。

1 个答案:

答案 0 :(得分:2)

将值分配给索引时,无需显式设置length属性。它push设置的原因确实在specification中定义:

  
      
  1. 重复,而项目不为空

         

    一个。从项中删除第一个元素,让E为元素的值。

         

    湾设setStatus为Set(O,ToString(len),E,true)。

         

    ℃。 ReturnIfAbrupt(setStatus)。

         

    d。让len为len + 1.

  2.   
  3. 设置setStatus(O,"长度",len,true)。
  4.   

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