为何Object.keys读取对象键从10开始而非00?如何按序读取?
JavaScript对象键顺序问题解答
1. 为何键的读取顺序从"10"而非"00"开始?
ES6及之后的JS规范明确了对象自有键的遍历规则:
- 第一优先级:整数型字符串键——指字符串能被解析为十进制整数,且解析后的整数转成字符串和原键完全一致(比如"10"符合:
Number("10")=10,String(10)="10";但"00"不符合:Number("00")=0,String(0)="0"≠"00")。这类键会按数字从小到大排序。 - 第二优先级:非整数型字符串键——按键的插入顺序排序。
你的对象中,"10"到"15"属于整数型键,会被优先排列(按数字10到15升序);"00"到"09"属于非整数型字符串键,按插入顺序排在后面,最终就出现了先10-15、再00-09的顺序。
2. 如何让键从"00"开始顺序读取?
有三种可行方案:
改用数组存储:如果不需要用字符串键做映射,直接用数组按顺序存储元素,或者存键值对对象,比如:
// 直接按顺序存值 const filesArr = [value00, value01, ..., value15]; // 或者存键值对 const filesArr = [ {key: "00", value: value00}, {key: "01", value: value01}, // ... 直到"15" ];遍历数组时自然会按00到15的顺序输出。
遍历后手动排序:保留对象结构,获取键数组后进行自定义排序:
// 方案1:按字符串字典序排序 const sortedKeys = Object.keys(files).sort(); // 方案2:转数字后按数值升序排序 const sortedKeys = Object.keys(files).sort((a, b) => Number(a) - Number(b));两种方式都能得到["00","01",..."09","10",..."15"]的顺序。
修改键名格式:给所有键添加非数字前缀(比如"file_00"、"file_10"),让所有键都成为普通字符串键。只要你按00到15的顺序插入键值对,
Object.keys()就会按插入顺序返回,也就是从"file_00"开始的顺序。
内容的提问来源于stack exchange,提问作者Vikas Acharya
相关产品推荐
相关产品推荐

