背景
后台直接给前端一个对象让循环遍历出来,但遍历顺序与预期不一致。
解决
让后台直接返回一个数组进行遍历才能保证顺序与预期一致。
原理
浏览器控制台会重新按ASCII排序键值对,
但这并不是对象的键值对没有顺序,
对象依旧保持原本的顺序,只是浏览器控制台在显示时做了修改。
JS对象是个哈希表,哈希表存储数据是有顺序的,
所以不要觉得浏览器控制台优化输出就觉得顺序不重要,
键名出现的顺序就是对象的顺序,for-in是绝对有序并且顺序固定的。
哈希表的原理是,两个数组,一个存储键,一个存储值,当然为了兼容各种编码,键会哈希化。
遍历哈希表就是遍历键名数组,数组存值是有序的,所以遍历哈希表顺序肯定是固定的。