如何在Javascript中检查es6代理的类型?

如何在Javascript中检查es6代理的类型?,javascript,es6-proxy,Javascript,Es6 Proxy,我正在使用ES6代理。我已经创建了一个数组的代理,现在当我检查代理的类型时,它给我的是Objecttype 问题: 如何检查我创建的代理是否用于数组或对象 示例: const arr=['a','b','c']; const arrProxy=新代理(arr,{}); 警报(类型(代理))您无法区分代理是代理。这是它们的一部分,它们在另一个对象周围提供了一个外观(你无法检测到) 就代码查看您的arrProxy所知,它是一个数组: const arr=['a','b','c']; const

我正在使用ES6代理。我已经创建了一个数组的代理,现在当我检查代理的类型时,它给我的是
Object
type

问题:

如何检查我创建的代理是否用于数组或对象

示例:

const arr=['a','b','c'];
const arrProxy=新代理(arr,{});

警报(类型(代理))您无法区分代理是代理。这是它们的一部分,它们在另一个对象周围提供了一个外观(你无法检测到)

就代码查看您的
arrProxy
所知,它是一个数组:

const arr=['a','b','c'];
const arrProxy=新代理(arr,{});

console.log(Array.isArray(arrProxy));//true
也有一种方法可以使用:


正如其他答案所暗示的那样,你无法判断某物是否是代理

因此,您可能需要自己实现它

以下是一个例子:


typeof[]
也是“对象”,请尝试
Array.isArray(arrProxy)
您是在问如何辨别
arrProxy
是一个数组,还是如何辨别它是一个代理?对于从另一个域接收到的任何数组,这都将失败。这就是为什么我们有
Array.isArray
。你说的
另一个领域是什么意思?@JoharZaman-A“…由一组内在对象、一个ECMAScript全局环境、在该全局环境范围内加载的所有ECMAScript代码以及其他相关的状态和资源组成。”例如,如果您有一个包含iframe的页面,那么页面和iframe是独立的领域;如果将数组从一个传递到另一个,
instanceof
将不起作用。类似地,如果一个窗口打开另一个窗口,如果您在它们之间传递数据,则该数据将跨越多个领域。@marsibarsi
instanceof
存在问题。当我使用对象的
arrProxy instanceof Object
时,它仍然给我true。
数组的
\uu proto\uuu
对象
这就是为什么
对象的arrProxy instanceof Object
也是
true
if (arrProxy instanceof Array) {
   console.log('This is an array!');
}
const proxies = new WeakSet();

export function createProxy(obj) {
  const handler = {};
  const proxy = new Proxy(obj, handler);
  proxies.add(proxy);
  return proxy;
}

export function isProxy(obj) {
  return proxies.has(obj);
}