@darwish/utils-core
Version:
31 lines (30 loc) • 900 B
JavaScript
/**
* Check if the given object is a proxy object
* @param obj any
* @returns boolean
*/
export default function isProxy(obj) {
if (!obj || (typeof obj !== "object" && typeof obj !== "function")) {
return false; // 非对象或函数返回 false
}
try {
var randomProperty = Symbol("test");
Object.defineProperty(obj, randomProperty, {
get: function () {
return true;
},
});
if (obj[randomProperty] === true) {
// 尝试删除定义的属性,如果失败则很可能是 Proxy
delete obj[randomProperty];
if (obj[randomProperty] === true) {
return false; // 如果删除成功,说明不是 Proxy
}
}
return true;
}
catch (e) {
// 如果操作抛出错误,很可能是 Proxy
return true;
}
}