mostrar - leer json javascript
Acceso a la propiedad de JavaScript: ¿notación de puntos vs. paréntesis? (11)
(Obtenido de here .)
La notación de corchetes permite el uso de caracteres que no se pueden usar con la notación de puntos:
var foo = myForm.foo[]; // incorrect syntax var foo = myForm["foo[]"]; // correct syntax
En segundo lugar, la notación entre corchetes es útil cuando se trata de nombres de propiedades que varían de forma predecible:
for (var i = 0; i < 10; i++) { someFunction(myForm["myControlNumber" + i]); }
Redondeo:
- La notación de puntos es más rápida de escribir y más clara de leer.
- La notación de corchetes permite el acceso a propiedades que contienen caracteres especiales y la selección de propiedades usando variables
Otro ejemplo de caracteres que no se pueden usar con notación de puntos son los nombres de propiedades que contienen un punto .
Por ejemplo, una respuesta json podría contener una propiedad llamada bar.Baz
.
var foo = myResponse.bar.Baz; // incorrect syntax
var foo = myResponse["bar.Baz"]; // correct syntax
Aparte del hecho obvio de que la primera forma podría usar una variable y no solo una cadena literal, ¿hay alguna razón para usar una sobre la otra, y si es así, en qué casos?
En codigo:
// Given:
var foo = {''bar'': ''baz''};
// Then
var x = foo[''bar''];
// vs.
var x = foo.bar;
Contexto: He escrito un generador de código que produce estas expresiones y me pregunto cuál es preferible.
Caso donde la notación []
es útil:
Si su objeto es dinámico y podría haber algunos valores aleatorios en las teclas como number
y []
o cualquier otro carácter especial, por ejemplo:
var a = { 1 : 3 };
Ahora, si intenta acceder a como a.1
lo hará a través de un error, porque está esperando una cadena por allí.
Debe usar corchetes si los nombres de las propiedades tienen caracteres especiales:
var foo = {
"Hello, world!": true,
}
foo["Hello, world!"] = false;
Aparte de eso, supongo que es solo una cuestión de gusto. En mi humilde opinión, la notación de puntos es más corta y hace que sea más obvio que es una propiedad en lugar de un elemento de matriz (aunque, por supuesto, JavaScript no tiene matrices asociativas de todos modos).
En general, hacen el mismo trabajo.
Sin embargo, la notación de corchete le da la oportunidad de hacer cosas que no puede hacer con la notación de puntos, como
var x = elem["foo[]"]; // can''t do elem.foo[];
Esto se puede extender a cualquier propiedad que contenga caracteres especiales.
La notación de corchete le permite acceder a las propiedades por nombre almacenado en una variable:
var obj = { "abc" : "hello" };
var x = "abc";
var y = obj[x];
console.log(y); //output - hello
obj.x
no funcionaría en este caso.
La notación de corchetes puede usar variables, por lo que es útil en dos casos donde la notación de puntos no funcionará:
1) Cuando los nombres de propiedad se determinan dinámicamente (cuando los nombres exactos no se conocen hasta el tiempo de ejecución).
2) Cuando se utiliza un bucle for..in para recorrer todas las propiedades de un objeto.
fuente: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
La notación de puntos no funciona con algunas palabras clave (como new
y class
) en internet explorer 8.
Yo tenía este código:
//app.users is a hash
app.users.new = {
// some code
}
Y esto activa el temido "identificador esperado" (al menos en IE8 en Windows XP, no he probado otros entornos). La solución simple para eso es cambiar a notación de corchete:
app.users[''new''] = {
// some code
}
Las dos formas más comunes de acceder a las propiedades en JavaScript son con un punto y entre corchetes. Tanto value.x and value[x]
acceden a una propiedad en valor, pero no necesariamente a la misma propiedad. La diferencia está en cómo se interpreta x. Cuando se usa un punto, la parte posterior al punto debe ser un nombre de variable válido, y nombra directamente la propiedad. Cuando se usan corchetes, la expresión entre corchetes se evalúa para obtener el nombre de la propiedad. Mientras value.x obtiene la propiedad de valor llamada "x", value [x] intenta evaluar la expresión x y usa el resultado como el nombre de la propiedad.
Entonces, si sabe que la propiedad en la que está interesado se llama "longitud", dice value.length
. Si desea extraer la propiedad nombrada por el valor contenido en la variable i
, debe decir value[i]
. Y como los nombres de propiedad pueden ser cualquier cadena, si desea acceder a una propiedad llamada “2”
o “John Doe”
, debe usar corchetes: value[2] or value["John Doe"]
. Este es el caso aunque sepa el nombre exacto de la propiedad por adelantado, ya que ni “2” nor “John Doe”
son un nombre de variable válido y, por lo tanto, no se puede acceder a él mediante la notación de puntos.
En caso de matrices
Los elementos en una matriz se almacenan en propiedades. Debido a que los nombres de estas propiedades son números y con frecuencia necesitamos obtener su nombre de una variable, tenemos que usar la sintaxis de corchete para acceder a ellos. La propiedad de longitud de una matriz nos dice cuántos elementos contiene. Este nombre de propiedad es un nombre de variable válido, y conocemos su nombre de antemano, por lo que para encontrar la longitud de una matriz, normalmente se escribe array.length
porque es más fácil de escribir que array["length"]
.
Permítanme agregar un poco más de caso de uso de la notación de corchetes. Si desea acceder a una propiedad, digamos x-proxy
en un objeto, entonces -
se interpretará incorrectamente. También hay otros casos como el espacio, el punto, etc., donde la operación del punto no lo ayudará. Además, si tiene la clave en una variable, la única forma de acceder al valor de la clave en un objeto es mediante notación de corchete. Espero que tengas algo más de contexto.
Tenga cuidado al usar estas notaciones: Por ejemplo, Si queremos acceder a una función presente en el padre de una ventana. En IE:
window[''parent''][''func'']
no es equivalente a
window.[''parent.func'']
Podemos utilizar:
window[''parent''][''func'']
o
window.parent.func
para acceder a ella
Tienes que usar la notación de corchete cuando -
El nombre de la propiedad es número.
var ob = { 1: ''One'', 7 : ''Seven'' }
ob.7 // SyntaxError ob[7] // "Seven"El nombre de la propiedad tiene un carácter especial.
var ob = { ''This is one'': 1, ''This is seven'': 7, }
ob.''This is one'' // SyntaxError ob[''This is one''] // 1El nombre de la propiedad se asigna a una variable y desea acceder al valor de la propiedad mediante esta variable.
var ob = { ''One'': 1, ''Seven'': 7, }
var _Seven = ''Seven''; ob._Seven // undefined ob[_Seven] // 7