您可以创建一个Proxy
以在访问未定义的属性时返回一个空字符串。
app.js
:
var obj = {"foo":"bar"},
arr = [],
p = Proxy.create({
get: function(proxy, name) {
return obj[name] === undefined ? '' : obj[name];
}
});
arr.push( p.foo );
arr.push( p.notDefinedOnObj );
console.log(arr);
正如问题作者 David Murdoch 所指出的,如果您使用的是 node v0.6.18(撰写本文时的最新稳定版本),则必须--harmony_proxies
在运行脚本时传递该选项:
$ node --harmony_proxies app.js
[ 'bar', '' ]
请注意,如果您使用 ,此解决方案将不起作用,with
如:
var obj = {"foo":"bar"},
arr = [],
p = Proxy.create({
get: function(proxy, name) {
return obj[name] === undefined ? '' : obj[name];
}
});
with ( p ) {
arr.push( foo ); // ReferenceError: foo is not defined
arr.push( notDefinedOnObj );
}
console.log(arr);
with
get
将代理添加到作用域链时似乎没有调用代理的方法。
Proxy.create()
注意:在本示例中传递给的代理处理程序是不完整的。有关更多详细信息,请参阅代理:常见错误和误解。