JavaScript中不使用Proxy,如何让对象未定义属性返回null
解决方案
在标准ECMAScript语法且不使用Proxy的前提下,无法实现拦截所有属性访问的需求,因此没办法保证访问任意未定义属性时都返回null——因为标准ES没有提供能捕获所有属性访问的原生机制,这个功能只能通过Proxy实现。
如果你的运行环境允许使用非标准特性(仅旧版Firefox支持,已废弃),可以尝试用__noSuchProperty__方法:
function xxx(key) { if (key === 'name') return null; if (key === 'age') return 'hello age'; return undefined; } let obj = {}; // 非标准方法,仅部分旧浏览器支持 obj.__noSuchProperty__ = function(key) { const res = xxx(key); return res === undefined ? null : res; };
如果必须遵循标准语法,那只能退而求其次,为已知属性定义getter,无法处理未知属性:
function xxx(key) { if (key === 'name') return null; if (key === 'age') return 'hello age'; return undefined; } let obj = {}; // 为已知属性绑定getter,返回处理后的值 Object.defineProperty(obj, 'name', { get: () => xxx('name') ?? null }); Object.defineProperty(obj, 'age', { get: () => xxx('age') ?? null }); // 注意:访问未知属性如obj.test仍会返回undefined
内容的提问来源于stack exchange,提问作者hxb
相关产品推荐
相关产品推荐

