recorrer objetos objeto lista keys eliminar elemento array agregar javascript node.js object-literal template-strings template-literals

javascript - objetos - object.keys map



Cadena de plantilla como nombre de propiedad del objeto (1)

¿Por qué las cadenas de plantilla no están permitidas como claves de objeto literales?

Las cadenas de plantilla son expresiones, no literales 1 . Solo puede usar literales de cadena (e identificadores) para los nombres de propiedades, para todo lo demás, que no se sabe que sea estático, necesita un nombre de propiedad calculado.

¿Es por razones de rendimiento?

No, eso es improbable. Es para facilitar el análisis y hace que sea fácil distinguir los nombres de propiedad constantes (conocidos estáticamente) de los calculados dinámicamente.

Y sobre todo, es una característica que nadie necesita. No simplifica ni acorta nada, y lo que lograrías con él ya es posible.

¿Se permitirá la sintaxis en algún momento en el futuro?

No

1: Incluso cuando se llaman "literales de plantilla", técnicamente no son literals . Y: las plantillas ni siquiera necesitan ser cadenas, pueden evaluar cualquier cosa.

¿Por qué JavaScript no permite una cadena de plantilla como clave de propiedad de objeto? Por ejemplo, cuando ingreso:

foo = {`bar`: ''baz''}

en NodeJS REPL, arroja un SyntaxError con "Cadena de plantilla inesperada" con una traza de pila larga. Sin embargo, los valores de las propiedades están bien, lo que no es tan inesperado. Se producen errores similares en el navegador, por ejemplo, Firebug arroja un SyntaxError con "ID de propiedad no válida".

Las cadenas de plantilla están permitidas en "nombres de propiedad calculados". Por ejemplo, esto se compila perfectamente en todos los navegadores que admiten la sintaxis:

var foo = { [`bar` + 1]: `baz` };

y crea el objeto {"bar1": "baz"} .

¿Por qué las cadenas de plantilla no están permitidas como claves de objeto literales? ¿Es por razones de rendimiento? Las cadenas de plantilla deben compilarse, posiblemente en tiempo de ejecución (corríjame si me equivoco), lo que significa que cada vez que encuentre este objeto, el intérprete tendrá que calcular el nombre del objeto. Teniendo en cuenta cosas como cadenas de plantillas "cocidas", parece que podría ser lento, aunque hemos tenido captadores y establecedores desde ES5. Firefox no menciona esto como un error, por eso lo encontré inesperado. ¿Se permitirá la sintaxis en algún momento en el futuro?