假设我有一个JavaScript对象:
var obj = {};
obj.computers = {};
obj.computers.favorite = "Commodore 64";
obj.computers.popular = "Apple";
现在,我可以轻松地检查 null 值,如下所示:
if(obj != 'undefined' && obj != null) {
if(obj.computers != 'undefined' && obj.computers != null)) {
.....
如您所见,如果我需要查看 obj.computers.favorite
是否已设置,我必须在那里嵌套一些条件逻辑。我们的一些对象会有3、4、5层。
这就是我想要做的:
var fav = obj.computers.favorite || 'Unknown';
但我意识到我需要将其包装在某个方法中。类似于:
var fav = getValueOrDefault(obj.computers.favorite, 'Unknown');
欢迎提出建议。
谢谢。
编辑
我实际使用的并不是检查'undefined'的方法。这只是在问问题时从我的脑海中冒出来的。哈哈
但我想知道,如果出现异常,我能否直接用try / catch包装并抛出默认值?
function(obj, default) {
try {
if(obj != null) {
return obj;
} else {
return default;
}
} catch(ex) {
return default;
}
}
此外,感谢Shusi指出了冗余的变量。
obj != 'undefined' && obj != null
是不正确的,因为要获取字符串值'undefined'
,需要使用 typeof。这是一个常见的错误。但无论如何,这样做过于冗长。只需使用obj != null
,它将同时测试undefined
。 - I Hate Lazyobj.computers
未定义,getValueOrDefault(obj.computers.favorite, 'Unknown')
将抛出异常。您需要将其包装在字符串中并进行递增对象解析。 - saml