2013-03-27 67 views
1

如何在对象文字中做一些错误处理?
至少我希望它是这样工作的:如何处理对象文字中的错误处理?

window.App={ 
    Variables:{ 
    "views_data": 
     try{ 
     json_parse(Drupal.settings.royal) 
     } 
     catch(e){ 
     JSON.parse(Drupal.settings.royal) 
     }   
    } 
} 
+0

@Lix感谢您的编辑......所以这不是一个noob问题; -P? – Jurudocs 2013-03-27 21:26:34

+0

不客气@jur!不管你的问题是否是“小白鼠”,取决于谁在阅读它。无论如何,我的编辑主要是将代码格式化得更好一些,而当我处理代码时,我删除了与实际问题无关的任何内容。当一年左右有人遇到这篇文章时,你是一个新的JS开发者的事实将是无关紧要的。看看[在这个meta post](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts)了解更多关于什么是在帖子中被认为是“噪音”。 – Lix 2013-03-27 21:29:51

回答

4

你可以使用一个立即调用函数:

window.App = { 
    Variables: { 
     views_data: (function(){ 
      var data; 
      try{ 
       data = json_parse(Drupal.settings.royal) 
      } 
      catch(e){ 
       data = {} 
      } 
      return data; 
     }()) 
    } 
} 
+0

谢谢......你说的很对;-P – Jurudocs 2013-03-27 21:25:03

1

由于try{...}catch(err){...}是控制结构,你可以把它添加到对象文本在JavaScript中。根据你想在哪里存储Drupal.settings.royal,你可以写你的对象是这样的:

window.App = { 
    Variables: { 
     views_data: null // this is optional 
    } 
}; 

现在作为你的目标是ready',你可以尝试添加解析JSON它:

try{ 
    window.App.Variables.views_data = json_parse(Drupal.settings.royal); 
}catch(err){ 
    window.App.Variables.views_data = JSON.parse(Drupal.settings.royal); 
} 

很好,很干净。

+0

好的。但是这个问题在**对象文字中明确提出**。 – Lix 2013-03-27 21:23:23

+0

@Lix你说得对 - 对不起,没有看到。 – 2013-03-27 21:25:15

1

1)使用一个立即调用的函数表达式

views_data : (function() { 
    var result = "", 
     json = Drupal.settings.royal; 

    try { result = json_parse(json); } 
    catch (e) { result = JSON.parse(json); } 
    return result; 
}()) 

2)除非有什么特别的你json_parse,其实我建议这样做其他各地的方式 - 使用浏览器的JSON.parse,来代替。本地实现将比你自己写的任何东西都快。然后回落到手写解决方案,如果JSON不存在。当然,那就是如果你在实现中没有做任何特别的事情。