javascript中的嵌套对象,最佳实践

javascript中的嵌套对象,最佳实践,javascript,object,Javascript,Object,我想知道在javascript中创建嵌套对象的正确方法。我想要一个名为“defaultsettings”的基本对象。它应该有两个属性(对象类型):ajaxsettings和uisettings。我知道我可以写像这样的东西 var defaultsettings = new Object(); var ajaxsettings = new Object(); defaultsettings.ajaxsettings = ajaxsettings.. etc. 但我想知道的是如何以这种方式键入(

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

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

defaultsettings.ajaxsettings = ajaxsettings.. etc.
但我想知道的是如何以这种方式键入(我认为这是一种更正确的方式):

我想你明白了。谢谢

var defaultsettings = {
    ajaxsettings: {
        ...
    },
    uisettings: {
        ...
    }
};
看看这个网站:


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

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

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声明为一个新对象?不,只需像那样构建。不,可以像这样声明。如果您想将另一个对象设置为ajaxsettings,只需将其列在:的另一侧,而不是{}。记住,除非逗号是列表中的最后一个属性,否则所有属性后面都要加逗号。关于JSON.stringify(),我想jquery中不包括逗号?很遗憾有人没有解释原因就投了反对票(不是我),但请注意JS对象文字和JSON是两个不同的东西。(讽刺的是,您答案中的示例代码不是有效的JSON。)我猜我错误地使用了两者,但我相信JSON是Javascript对象的有效表示形式,只是它是字符串中的一个。理解正确的JSON符号将允许OP编写正确的对象文本。我知道我写的不是JSON,但就对象文字而言,它是正确的,不是吗?我想
defaultsettings[“ajaxsettings”][“somekey”]
相当于
defaultsettings.ajaxsettings.somekey
?是的。只要键名遵循有效JS标识符名称的规则,即不以数字开头、不以JS保留字开头、不使用空格等,就可以使用点表示法(如果使用方括号语法,所有这些都是允许的,事实上,纯属偶然,我上面的最后一个示例在键名中有空格)有没有办法让我的代码像var obj={}//在推送对象之后,应该像obj{'a':{'key':'value'},'b':{'key':'value'}//我的代码是var client={};push(socket.id:{[socket.id]:val})//缺少获取错误(参数请注意,在ES6中,您现在可以使用对象文字符号从变量中声明键,如so
{[myVariable]:“myValue”}
@sigmapi13-
keyname
是一个变量,不应该在其周围加引号。在最佳实践中,
{}
而不是
new object()
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";