JavaScript——para el mecanismo de bucle y el orden de impresión de console.log

Al usar el bucle for in para imprimir, vi que el orden mostrado en la consola no era el orden de los objetos, así que aprendí sobre el bucle for in y descubrí que el bucle for in no se imprimió en orden.

Veamos primero este ejemplo:

El resultado de salida es:

Se puede ver que el orden de salida de los nombres de clave no es el orden de los nombres de clave que definimos. A través del orden de impresión, podemos sacar la siguiente conclusión:

El bucle for in calculará los resultados del parsefloat para todas las claves; extraerá el parsefloat que sea 0 o un entero positivo y lo generará de pequeño a grande; generará los restantes en el orden definido;

En este punto, estoy pensando, estoy imprimiendo en un bucle for in, así que si imprimo este objeto directamente afuera, ¿qué tipo de orden será?

El resultado impreso es:

Cuando ve este resultado por primera vez, algunas personas pueden pensar: ¿no es esto una disposición de los valores absolutos de los números en orden ascendente? Pero mira con atención, el orden de 0a y 10 es anterior al 2, así que realicé otra prueba.

Defina una cadena puramente numérica como el objeto de nombre clave y luego imprima y renderice. Los resultados son los siguientes:

Se puede ver que la representación no se ve afectada, lo que significa que el orden de los pares clave-valor del propio obj no se ve afectado. La regla del orden de impresión es 0->1->10...->2->20... En otras palabras, console.log analizará cada carácter del nombre de la clave por separado y luego los organizará e imprimirá en orden. Esto también explica por qué 0a y 10 vienen antes que 2. Entonces, ¿por qué los números negativos se generan antes? Hagamos otra prueba:

El resultado de la impresión es

En otras palabras, -2 no se considera un número negativo, sino que se analiza en un operador y un número 2, que es coherente con el orden de impresión en el segundo ejemplo, es decir, el orden de impresión es Operador-> Número->Otros caracteres.

Entonces, ¿qué pasa si imprimimos JSON.stringify(obj)? O el segundo ejemplo:

El resultado impreso es:

Puedes ver que el mecanismo es el mismo que el del bucle for in.

Resumir:

El mecanismo de bucle for in es:

对所有key计算parsefloat的结果,将parsefloat为0或正整数的提取出来,从小到大输出,再将剩下的按定义顺序输出。JSON.stringify()的打印顺序同for in循环机制一样。

console.log的打印顺序为:

将所有键名的每一个字符进行拆分解析,按照字符顺序先打印运算符,运算符顺序同运算符优先级,然后是数字,最后其他字符按照定义顺序打印,如果第一位相同则进行第二位的比较。

仅为个人理解,有错误欢迎指出。

Supongo que te gusta

Origin blog.csdn.net/D_XY666/article/details/129194427
Recomendado
Clasificación