0

ECMAScript 6 引入了代理对象,它可以被创建为可撤销的。

如何检测代理是否已被撤销?

4

1 回答 1

2

构造函数仅在Proxy目标和处理程序是对象且未被撤销的代理时才接受它们。从ProxyCreate

  1. 如果Type ( target ) 不是 Object,则抛出 TypeError 异常。
  2. 如果target是 Proxy 外来对象,并且 target 的 [[ProxyHandler]]内部的值为 null,则抛出 TypeError 异常。

这允许你检查一个值是否是一个被撤销的代理:你只需要确保它是一个对象但会Proxy抛出。

像这样的东西应该工作:

function isRevokedProxy(value) {
  try {
    new Proxy(value, value);
    return false;
  } catch(err) {
    return Object(value) === value;
  }
}
于 2016-09-05T18:23:45.723 回答