En diciembre de 2009, ECMAScript lanzó EcMascript 5, que se lanzó para la última versión del estándar Ecmascript 3 para la versión anterior. La complejidad de este lenguaje (es decir, si aumentará una gran cantidad de características para expandir la función de Ecmascript) y murió, lo que hace que la formulación de los nuevos estándares ECMAScript se quede atrás de la programación. Ecmascript 5 no es tan ambicioso en términos de objetivos. En este modo, la sintaxis de ECMAScript se ha vuelto más estricto, lo que hace que ya no se permitan muchos códigos fáciles de propensidad, incluidas las declaraciones variables obligatorias y la falta de vigencia con las declaraciones. Este modo es muy simple.
Más tarde supe que en 2010, también escribí un breve artículo para discutir los defectos de con palabras clave, con lo siguiente.
cuña
Hace mucho tiempo, la ciudad natal de Dios Ma Liang lleva el nombre de su nombre. Ma Liang no renunció, pero hizo cuatro palabras. Muchos años después, un extranjero vino aquí y detuvo a una persona local en este camino.
¿Es este camino de Shenma?
Sí, este es Shenma Road.
¿Tampoco lo sabes?
Soy esta persona, ¿cómo podría no saber?
¿Es este camino de Shenma?
Sabes lo que preguntas.
Simplemente no sé si este es Shenma Road.
¿No te dije que este es Shenma Road?
¿Puedes decirlo de nuevo?
Ninfo
Después de eso, los lugareños recordaron las opiniones de Ma Liang ese año, y de repente se dieron cuenta. De lo que Ma Liang está hablando, no use la abreviatura.
Una pregunta
Una gira de un día a Wang Er, su amigo chino, "tengo un sueño. Quiero mostrarme en CCTV". CCTV de la tienda.
La pregunta es cuando Tom dijo su sueño, él es
A) ambicioso b) no ambicioso c) ambiguo d)
El angr derecho es b) y c).
texto
Los dos ejemplos anteriores de China antigua y moderna y países extranjeros explicaron que la reflexión a veces causa ambigüedad. Esto también existe en JavaScript. A veces es muy problemático regenerar una larga variable, como ::
objectWithLongName1.Propty1 = value1;
ObjectWithLongName1.Propty2 = value2;
ObjectWithLongName1.Propty3 = value3;
ObjectWithLongName1.method1 ();
Pero un nombre claro es muy importante para la legibilidad del programa. Entonces JavaScript proporciona una declaración. El ejemplo anterior se puede reescribir:
Copiar código del código de la siguiente manera:
Con (ObjectWithLongName1) {{
propty1 = valor1;
propy2 = value2;
propy3 = valor3;
Método1 ();
}
Esto ahorra mucho Kung Fu en el teclado, y la estructura del programa se vuelve más clara. Pero esta abreviatura introduce la ambigüedad. Las reglas de análisis de JavaScript son encontrar los atributos de estos nombres en ObjectWithLongName1 primero. Esto es lo que explica el código:
Copiar código del código de la siguiente manera:
If (objectWithLongName1.Property1! == Undefined) {
If (objectWithLongName1.Value1! == Undefined) {
ObjectWithLongName1.Property1 = ObjectWithLongName1.Value1;
} Demás {
ObjectWithLongName1.Property1 = Valor1;
}
} Demás {
If (objectWithLongName1.Value1! == Undefined) {
Propiedad1 = ObjectWithLongName1.Value1;
} Demás {
Propiedad1 = valor1;
}
}
Lo que queremos es una de estas cuatro posibilidades, pero si no tiene cuidado, el programa ejecutará otra posibilidad. Además, esta forma de escribir también es muy difícil de resolver los lectores del programa. Por otro lado, esta incertidumbre también afecta el rendimiento del lenguaje para el intérprete JavaScript.
De hecho, mientras se pueda eliminar una pequeña mejora, se pueden eliminar estos defectos. Podemos agregar un número de punto antes de los atributos del objeto, para que haya una distinción intuitiva entre los atributos y las variables externas, y hay muchos otros idiomas que hacen esto. Nuestros ejemplos iniciales se volverán así:
Copiar código del código de la siguiente manera:
Con (ObjectWithLongName1) {{
.propty1 = valor1;
.propty2 = value2;
.propty3 = value3;
.method1 ();
}
Antes de que JavaScript hiciera tales mejoras, las dos potencia dañina son ligeras, y debemos tratar de evitar usar la declaración con la declaración tanto como sea posible. Todavía podemos adoptar algunos métodos de cambio.
Copiar código del código de la siguiente manera:
var o1 = objectWithLongName1;
o1.prpty1 = valor1;
o1.Prpty2 = value2;
o1.Prpty3 = value3;
o1.method1 ();
O para esta situación:
ObjectWithLongName1.Propty1 = ObjectWithLongName2.Propty1;
ObjectWithLongName1.Propty2 = ObjectWithLongName2.Propty2;
Ninfo
ObjectWithLongName1.Propty10 = ObjectWithLongName2.Propty10;
Se puede escribir como:
Copiar código del código de la siguiente manera:
(Función (O1, O2, PL) {
pl.ForEach (function (it) {o1 [item] = o2 [item];});
}) (ObjectWithLongName1, ObjectWithLongName2, ['Propty1', 'PropTy2', ..., 'Propty10'));