una tipos texto span pasar parametros lista funciones funcion desde cambiar javascript json properties javascript-objects reserved-words

javascript - tipos - usando palabras reservadas como nombres de propiedad, revisitados



pasar parametros a una funcion javascript desde html (4)

¿Se puede usar una reserved word como nombre de propiedad de un objeto?

Este problema se planteó indirectamente en una pregunta anterior sobre el flujo de acumulación . la respuesta parecía consenso general de @Squeegy:

Puedes usar esas palabras, pero solo como cadenas y no como propiedades taquigráficas - foo["class"] es genial, mientras que foo.class no es
útilmente dando un enlace a la lista de palabras reservadas

aunque creo que @Squeeky probablemente esté más informado que yo en esta área y que probablemente sea una mala idea usar palabras reservadas en algunas situaciones, creo que su conclusión es incorrecta en base a dos puntos:

  • prueba de las palabras reservadas usándolas como propiedades de "taquigrafía"

  • HTMLFormElement hace que sea imposible no usar palabras reservadas en "taquigrafía"

Primero, usando la lista de palabras reservadas, cada una se agregó como una propiedad a un Object y HTMLElement , ambos como obj["word"] y obj.word , y luego se recuperaron como obj["word"] y obj.word . En cada uno de los 63 casos, las ocho pruebas funcionaron correctamente.

En segundo lugar, HTMLFormElement necesita que esto funcione porque recupera en sus elementos usando notación abreviada. Si <input name=''typeof'' value=''scalar'' /> es un elemento de un formulario, entonces form.typeof == "escalar".

Según mi experiencia, las palabras reservadas generalmente son datos infligidos (por ejemplo, una columna llamada "privada"), no un programa infligido. Como tales, contaminan los objetos JSON, y desde allí INPUT, y desde allí el HTMLFormElement. En pocas palabras, sin una gran cantidad de trabajo (no es necesario), es imposible evitar que las palabras reservadas no se vean obligadas a funcionar correctamente en forma abreviada.

Me parece que estos problemas reales:

  • se debe tener cuidado de no entrar en conflicto con las propiedades existentes, no palabras reservadas

  • (muchas si no todas) las variables no pueden ser palabras reservadas

  • El uso de palabras reservadas como propiedades puede ser (pero no necesariamente) confuso

¿Es correcta esta conclusión entonces, que las palabras reservadas como nombres de propiedad, y el acceso a ellas como cadenas o taquigrafía, está bien, siempre que se aplique un poco de sentido común a la situación?


En ECMAScript, a partir de ES5, las palabras reservadas se pueden usar como nombres de propiedades de objetos "en el buff". Esto significa que no necesitan estar "cubiertos" entre comillas al definir los literales de los objetos, y pueden desreferenciarse (para acceder, asignar y eliminar) en los objetos sin tener que usar la notación de indexación de los corchetes.

Dicho esto, las palabras reservadas aún NO se pueden usar como nombres de identificadores. Esto se establece de manera bastante inequívoca en la especificación y se afirma de manera un tanto enfática aquí (si no desea que sus ojos sangren al tener que leer la especificación del lenguaje real) ...

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words

Las siguientes son palabras clave y no pueden usarse como variables, funciones, métodos o identificadores de objeto, porque ECMAScript especifica un comportamiento especial para ellos:


No estoy seguro de cuál es el punto que desea hacer, por lo que la única respuesta que puedo dar es: Sí, está bien usar palabras reservadas como nombres de propiedad.

(Sin embargo, dos pequeños comentarios: foo["class"] está bien, no foo[class] . Y de cualquier forma debería usar form.elements["xyz"] y no form.xyz para acceder a un elemento llamado xyz ).



Sí, puede ser usado.

Solo pequeña observación, si usas el compresor YUI tienes que poner el nombre de la propiedad que es igual a una de las palabras reservadas js entre comillas.

Por ejemplo, esto no se comprime

var a = { case : "foo"}; // syntax error, "invalid property id" a.for = "bar"; // syntax error, "missing name after . operator"

Esto lo hara

var a = { "case" : "foo"}; //OK a["for"] = "bar"; //OK

Aquí está la compresión en línea de JavaScript / CSS con el compresor YUI, donde se puede probar.