Me gustaría saber la forma correcta de crear un objeto anidado en javascript. Quiero un objeto de base de la llamada «defaultsettings». Se debe de tener 2 propiedades (tipo de objeto): ajaxsettings y uisettings. Sé que puedo escribir algo como

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

defaultsettings.ajaxsettings = ajaxsettings.. etc.

Pero lo que quiero saber es cómo escribir de esta manera (que supongo que es una manera más correcta de hacerlo):

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

Supongo que usted consigue la idea. Gracias!

  • A propósito de las mejores prácticas, {} en lugar de new Object().
InformationsquelleAutor Johan | 2011-10-29

3 Comentarios

  1. 74

    Si conoce la configuración de la antelación con la que se puede definir en una sola frase:

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

    Si usted no sabe los valores en adelantado que usted puede simplemente definir el nivel superior del objeto y, a continuación, agregar propiedades:

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

    O a medio camino entre los dos, definir el nivel superior, con anidada vacía objetos como propiedades y, a continuación, agregar propiedades a los objetos anidados:

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

    Puede anidar tan profundo como te gusta el uso de las técnicas anteriores, y en cualquier lugar que usted tiene un literal de cadena en los corchetes puede utilizar una variable:

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

    Tenga en cuenta que puede no usar variables para los nombres clave en el { } la sintaxis literal.

    • supongo que defaultsettings["ajaxsettings"]["somekey"] es equivalente a defaultsettings.ajaxsettings.somekey ?
    • Sí, sí que lo es. Usted puede utilizar la notación de punto tan largo como el nombre de la clave sigue las reglas para la válida JS nombres de identificador, es decir, no empezar con un número, no un JS palabra reservada, sin espacios, etc. (Todas esas cosas están permitidas si el uso de los corchetes de la sintaxis, de hecho puramente por accidente de mi último ejemplo de arriba tenía un espacio en un nombre de clave.)
    • hay alguna forma de hacer que mi código como var obj = {}; //después de empujar el objeto debe verse como obj { ‘a’ : {‘clave’:’valor’}, ‘b’ : {‘clave’:’valor’} } //mi código es el var cliente = {}; cliente.push(socket.id:{[zócalo.id]:val}); //obtención de error que falta ( argumento
    • es un método de la matriz, no se puede utilizar en un simple objeto. Pero el código que se muestra en mi respuesta, se muestra cómo obtener algo como { 'a' : {'key':'value'}, 'b' : {'key':'value'} } mediante la adición de objetos y, a continuación, agregar propiedades a ellos.
    • Por favor, tenga en cuenta que en ES6 ahora puede declarar claves de variables con el objeto de la notación literal como { [myVariable]: "myValue"}.
    • es una variable, no se debe tener comillas.
    • puedo crear un objeto anidado con ninguna tecla { {}, {} ) ?
    • El objeto anidado puede estar vacío, pero debe ser el valor asociado a una clave de la que contiene el objeto, de modo que: { x: {}, y: {} }.

  2. 11
    var defaultsettings = {
        ajaxsettings: {
            ...
        },
        uisettings: {
            ...
        }
    };
    • Necesito declarar ajaxsettings como un nuevo objeto fuera de defaultsettings?
    • No, sólo construir exactamente igual.
    • No todo puede ser declarado como este. Si usted tiene otro objeto que desea establecer como su ajaxsettings, sólo la lista en el otro lado de la : en lugar de {}. Recuerde, tener la coma después de todas las propiedades a menos que sea la última propiedad en la lista.
  3. 3
    var defaultSettings = {
        ajaxsettings: {},
        uisettings: {}
    };

    Echa un vistazo a este sitio: http://www.json.org/

    También, puede intentar llamar a JSON.stringify() en uno de los objetos del navegador para ver el formato json. Tendrías que hacer esto en la consola o en una página de prueba.

    • con respecto a JSON.stringify(), supongo que eso no es incluido en jquery?
    • Es una lástima que alguien votada abajo sin explicar por qué (no fui yo), pero tenga en cuenta que JS objeto literales y JSON son dos cosas diferentes. (E, irónicamente, en el ejemplo de código en su respuesta no es válida JSON).
    • Supongo que utilizar incorrectamente los dos como el mismo pero creo que JSON es válida la representación de un objeto de Javascript, excepto que se trata de una en una cadena. La comprensión adecuada de la notación JSON permitiría a la OP a la escritura correcta de objetos literales. Entiendo que lo que escribió no fue JSON, pero tan lejos como un literal de objeto, es correcto ¿no?

Dejar respuesta

Please enter your comment!
Please enter your name here