【发布时间】:2012-09-22 17:25:13
【问题描述】:
假设我有一个 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');
建议表示赞赏。
谢谢
编辑
我对“未定义”的检查实际上并不是我使用的。当我问这个问题时,它只是从我的脑海中浮现出来。哈哈
但我想知道,我是否可以只包装一个 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。 -
getValueOrDefault(obj.computers.favorite, 'Unknown')如果obj.computers未定义,则会抛出异常。您必须将其包装在一个字符串中并进行增量对象解析。 -
@saml 完全正确。这是我试图避免的。我们的 JS 对象有时会非常深入。我想我可以做一个 try/catch 并在异常时返回默认值?
标签: javascript isnull