【问题标题】:Nested objects in javascript, best practicesjavascript中的嵌套对象,最佳实践
【发布时间】:2011-12-18 01:10:38
【问题描述】:

我想知道在 javascript 中创建嵌套对象的正确方法。我想要一个名为“defaultsettings”的基础对象。它应该有 2 个属性(对象类型):ajaxsettings 和 uisettings。我知道我可以写类似的东西

var defaultsettings = new Object();
var ajaxsettings = new Object();

defaultsettings.ajaxsettings = ajaxsettings.. etc.

但我想知道的是如何以这种方式输入(我认为这是一种更正确的方式):

var defaultsettings = { 
    var ajaxsettings = { ... }
};

我想你明白了。谢谢!

【问题讨论】:

  • 适当的最佳实践,{} 而不是 new Object()

标签: javascript object


【解决方案1】:

如果您事先知道设置,您可以在单个语句中定义它:

var defaultsettings = {
                        ajaxsettings : { "ak1" : "v1", "ak2" : "v2", etc. },
                        uisettings : { "ui1" : "v1", "ui22" : "v2", etc }
                      };

如果您事先不知道值,您可以定义顶级对象,然后添加属性:

var defaultsettings = { };
defaultsettings["ajaxsettings"] = {};
defaultsettings["ajaxsettings"]["somekey"] = "some value";

或者介于两者之间,将嵌套空对象的顶层定义为属性,然后将属性添加到这些嵌套对象:

var defaultsettings = {
                        ajaxsettings : {  },
                        uisettings : {  }
                      };

defaultsettings["ajaxsettings"]["somekey"] = "some value";
defaultsettings["uisettings"]["somekey"] = "some value";

您可以使用上述技术尽可能多地嵌套,并且在方括号中有字符串文字的任何地方都可以使用变量:

var keyname = "ajaxsettings";
var defaultsettings = {};
defaultsettings[keyname] = {};
defaultsettings[keyname]["some key"] = "some value";

请注意,您可以在 { } 文字语法中使用变量作为键名。

【讨论】:

  • 我想defaultsettings["ajaxsettings"]["somekey"] 等价于defaultsettings.ajaxsettings.somekey ?
  • 是的。只要键名遵循有效的 JS 标识符名称的规则,即不以数字开头、不是 JS 保留字、没有空格等,您就可以使用点表示法。(如果您使用方括号语法,确实纯属偶然,我上面的最后一个示例确实在键名中有空格。)
  • 有什么方法可以让我的代码像 var obj = {}; //推入对象后应该看起来像 obj { 'a' : {'key':'value'}, 'b' : {'key':'value'} } //我的代码是 var client = {}; client.push(socket.id:{[socket.id]:val}); //得到错误丢失(参数
  • 请注意,在 ES6 中,您现在可以使用对象文字符号从变量中声明键,例如 { [myVariable]: "myValue"}
  • @sigmapi13 - keyname 是一个变量,它不应该有引号。
【解决方案2】:
var defaultSettings = {
    ajaxsettings: {},
    uisettings: {}
};

看看这个网站:http://www.json.org/

另外,您可以尝试从浏览器中对您的一个对象调用 JSON.stringify() 以查看 json 格式。您必须在控制台或测试页面中执行此操作。

【讨论】:

  • 关于 JSON.stringify(),我想那不包括在 jquery 中?
  • 很遗憾有人在没有解释原因的情况下投了反对票(不是我),但请注意 JS 对象文字和 JSON 是两个不同的东西。 (而且,具有讽刺意味的是,您答案中的示例代码不是有效的 JSON。)
  • 我想我错误地使用了两者,但我相信 JSON 是 Javascript 对象的有效表示,除了它是一个字符串。理解正确的 JSON 表示法将允许 OP 编写正确的对象文字。我知道我写的不是 JSON,但就对象文字而言,它是正确的,不是吗?
【解决方案3】:
var defaultsettings = {
    ajaxsettings: {
        ...
    },
    uisettings: {
        ...
    }
};

【讨论】:

  • 我需要将 ajaxsettings 声明为 defaultsettings 之外的新对象吗?
  • 不,就这样构建。
  • 不,都可以这样声明。如果您有另一个要设置为 ajaxsettings 的对象,只需将其列在 : 而不是 {} 的另一侧。请记住,除非它是列表中的最后一个属性,否则在所有属性之后都有逗号。
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 2019-03-16
相关资源
最近更新 更多