En cuanto a los objetos, ¿por qué tienen claves asociadas a sus datos? Por ejemplo: una variable con el identificador 'num' mantendrá una referencia a ese valor en la memoria, pero ¿por qué los objetos no usan este principio? En cambio, tienen claves que son, corríjame si me equivoco, valores reales en sí mismos que están asociados con una propiedad de un objeto. Espero estar explicando esto correctamente. En resumen, ¿por qué los objetos no usan identificadores como variables estándar y en su lugar tienen claves asociadas con ellos que son sus propios valores? Lo verifiqué y JS dice que son del tipo 'cadena'. Las variables estándar tienen un identificador que no es un valor sino una referencia a dicho valor, ¿por qué los objetos tienen esta capa adicional de complejidad?
¿Por qué los objetos se comportan así?
Variable clave asociada a variable
Y no así (como una declaración normal con let, var, const)-
Variable de referencias del identificador
Nota: soy nuevo en JS
Una clave es un valor de tiempo de ejecución, mientras que un identificador es un elemento sintáctico.
Los objetos en JS no tienen una forma fija, puede crear, actualizar y eliminar propiedades en ellos a voluntad. Y puede hacerlo dinámicamente, sin saber los nombres de las propiedades cuando escribe el programa, usando la notación de corchetes : obj[prop] = val . Y de manera similar, puede recorrer las claves de un objeto con for (const prop in obj) . Esta es la razón por la cual las claves son cadenas (o símbolos ): debe acceder a ellas con/como valores de cadena.
El término "identificador" se refiere a una sintaxis específica en la gramática del idioma. Es escrito por el programador y analizado por el compilador. Tenga en cuenta que en la expresión obj.prop , tanto " obj " como " prop " son identificadores, por lo que ni siquiera tienen que referirse a variables. Son solo el subconjunto de cadenas que puede escribir para nombrar variables y propiedades con sintaxis de puntos. No son valores a los que pueda acceder desde un programa javascript, y en realidad ya no existen en tiempo de ejecución.
Sin embargo, es posible que haya querido decir variables. Las variables se distinguen por identificadores, el mismo identificador en el mismo ámbito se referirá a la misma variable. Esta distinción ocurre por nombre, tratando los nombres de las variables como cadenas en el compilador. Simplemente nunca te pones en contacto con esas cadenas del código JS. Cuando se ejecuta el código, para cada nombre declarado se creará una variable con un valor en una estructura de entorno para ese ámbito.
Entonces hay cierta similitud:
Y, de hecho, esta similitud es (o ha sido) aprovechada por el uso de eval y with declaraciones y el objeto global, que en realidad permiten la creación dinámica y la asignación de variables por nombre. Para estos, el intérprete debe mantener los nombres de las variables (como cadenas) en la memoria. Sin embargo, es ineficiente y despreciado. Cuando ellos (tanto las claves de objeto como los nombres de variables) no son dinámicos, el intérprete podrá optimizarlos mucho.