2

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

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

3 回答 3

4

您可以使用立即调用的函数:

window.App = {
    Variables: {
        views_data: (function(){
            var data;
            try{
                data = json_parse(Drupal.settings.royal)
            }
            catch(e){
                data = {}
            }
            return data;
        }())
    }
}
于 2013-03-27T21:17:57.270 回答
1

作为try{...}catch(err){...}控制结构,您不能将其添加到 javascript 中的对象文字中。根据您想要存储的位置Drupal.settings.royal,您可以这样编写对象:

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

现在,当您的对象准备就绪时,您可以尝试将解析后的 json 添加到其中:

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

干净整洁。

于 2013-03-27T21:19:51.747 回答
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如果不存在,则回退到手写解决方案。当然,前提是您在实现中没有做任何特别的事情。

于 2013-03-27T21:20:54.170 回答