如何在Javascript中检查es6代理的类型?
我正在使用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
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
将不起作用。类似地,如果一个窗口打开另一个窗口,如果您在它们之间传递数据,则该数据将跨越多个领域。@marsibarsiinstanceof
存在问题。当我使用对象的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);
}