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的打印顺序为:
将所有键名的每一个字符进行拆分解析,按照字符顺序先打印运算符,运算符顺序同运算符优先级,然后是数字,最后其他字符按照定义顺序打印,如果第一位相同则进行第二位的比较。
仅为个人理解,有错误欢迎指出。