ES6 Proxy 记录了一个无法解释的额外值

ES6 Proxy logs an unexplainable extra value

到目前为止,我已经将 ES6 代理理解为一种添加拦截的方式,允许您向代码添加自定义行为。实现此代码片段以拦截对数组的推送,但它会在推送后记录额外的 'trapped! 1',我无法弄清楚原因。有谁知道它为什么这样做?这是否意味着陷阱中的代码是 运行 两次?

const handler = {
  set(target, propertyKey, value, receiver) {
    console.log('trapped!', value);
    return Reflect.set(target, propertyKey, value, receiver);
  }
};

const p = new Proxy([], handler);
p.push('a')

它正在设置长度以及您要推入的数组的索引。这就是为什么它每次推送都会运行两次。

let handler = {
  set(target, propertyKey, value, receiver) {
    console.log(`set ${propertyKey} to ${value}`)
    return Reflect.set(target, propertyKey, value, receiver);
  }
};

const p = new Proxy([], handler);
p.push('a')