You can create a Proxy
to return an empty string whenever undefined properties are accessed.
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);
As question author David Murdoch notes, if you are using node v0.6.18 (the latest stable release at the time this post was written), you must pass the --harmony_proxies
option when you run the script:
$ node --harmony_proxies app.js
[ 'bar', '' ]
Note that this solution will not work if you use with
, as in:
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
does not seem to call the proxy's get
method when adding the proxy to the scope chain.
Note: the proxy handler passed to Proxy.create()
in this is example is incomplete. See Proxy: Common mistakes and misunderstanding for more details.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…