Aparte del hecho obvio de que la primera forma podría usar una variable y no solo un literal de cadena, ¿hay alguna razón para usar una sobre la otra? De ser 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.
javascript
syntax
object-literal
Mark Renouf
fuente
fuente
Respuestas:
(Procedente de aquí )
La notación de corchetes permite el uso de caracteres que no se pueden usar con la notación de puntos:
incluidos caracteres no ASCII (UTF-8), como en
myForm["ダ"]
( más ejemplos ).En segundo lugar, la notación de corchetes es útil cuando se trata de nombres de propiedades que varían de manera predecible:
Redondeo:
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
.fuente
La notación de paréntesis le permite acceder a las propiedades por nombre almacenado en una variable:
obj.x
No funcionaría en este caso.fuente
Las dos formas más comunes de acceder a las propiedades en JavaScript son con un punto y entre corchetes. Ambos
value.x and value[x]
acceden a una propiedad en valor, pero no necesariamente la misma propiedad. La diferencia está en cómo se interpreta x. Cuando se usa un punto, la parte que sigue al punto debe ser un nombre de variable válido y nombra directamente la propiedad. Cuando se utilizan corchetes, la expresión entre corchetes se evalúa para obtener el nombre de la propiedad. Mientras que value.x obtiene la propiedad del valor llamado "x", el valor [x] intenta evaluar la expresión x y utiliza el resultado como el nombre de la propiedad.Entonces, si sabe que la propiedad que le interesa se llama “longitud”, usted dice
value.length
. Si desea extraer la propiedad nombrada por el valor contenido en la variablei
, digavalue[i]
. Y debido a que los nombres de propiedades pueden ser cualquier cadena, si desea acceder a una propiedad llamada“2”
o“John Doe”
, debe utilizar corchetes:value[2] or value["John Doe"]
. Este es el caso a pesar de que conoce el nombre preciso de la propiedad de antemano, porque ninguno de los dos“2” nor “John Doe”
es 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, a menudo, necesitamos obtener su nombre de una variable, tenemos que usar la sintaxis de paréntesis 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 escribe
array.length
porque es más fácil de escribir quearray["length"]
.fuente
The elements in an array are stored in properties
Esto es lo que me confunde. ¿Qué quieres decir con almacenado en propiedades? ¿Qué son las propiedades? En mi opinión, la matriz es solo un montón de valores sin propiedades. Si se almacenan en propiedades, ¿cómo es que no esproperty: value
/ matriz asociativa?La notación de puntos no funciona con algunas palabras clave (como
new
yclass
) en Internet Explorer 8.Tenía este código:
Y esto desencadena 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 la notación de paréntesis:
fuente
Tenga cuidado al usar estas anotaciones: por ej. si queremos acceder a una función presente en el padre de una ventana. En IE:
no es equivalente a
Podemos usar:
o
para acceder a ella
fuente
En términos generales, hacen el mismo trabajo.
Sin embargo, la notación de corchetes te da la oportunidad de hacer cosas que no puedes hacer con la notación de puntos, como
Esto se puede extender a cualquier propiedad que contenga caracteres especiales.
fuente
Debe usar corchetes si los nombres de las propiedades tienen caracteres especiales:
Aparte de eso, supongo que es solo cuestión de gustos. 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).
fuente
Debe usar la notación de corchetes cuando:
El nombre de la propiedad es número.
El nombre de la propiedad tiene un carácter especial.
El nombre de la propiedad se asigna a una variable y desea acceder al valor de la propiedad mediante esta variable.
fuente
La notación de corchetes puede usar variables, por lo que es útil en dos casos en los que la notación de puntos no funcionará:
1) Cuando los nombres de las propiedades se determinan dinámicamente (cuando los nombres exactos no se conocen hasta el tiempo de ejecución).
2) Cuando se usa 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
fuente
Caso donde la
[]
notación es útil:Si el objeto es dinámico y puede haber algunos valores aleatorios de teclas como
number
y[]
o cualquier otro carácter especial, por ejemplo -var a = { 1 : 3 };
Ahora, si intenta acceder como
a.1
lo hará a través de un error, porque está esperando una cadena allí.fuente
La notación de puntos siempre es preferible. Si está utilizando algún IDE o editor de texto "más inteligente", mostrará nombres indefinidos de ese objeto. Use la notación de corchetes solo cuando tenga el nombre con guiones similares o algo similar no válido. Y también si el nombre se almacena en una variable.
fuente
Math.sqrt(25)
, pero noMath['sqrt'](25)
.Permítanme agregar un caso de uso más de la notación de corchetes. Si desea acceder a una propiedad, digamos
x-proxy
en un objeto,-
se interpretará incorrectamente. También hay otros casos como espacio, punto, etc., donde la operación de puntos no lo ayudará. Además, si tiene la clave en una variable, entonces la única forma de acceder al valor de la clave en un objeto es mediante notación de paréntesis. Espero que tengas más contexto.fuente
Un ejemplo donde la notación de puntos falla
fuente