Javascript 为什么对象中的负关键点在后面?有可能把它修好吗?

Javascript 为什么对象中的负关键点在后面?有可能把它修好吗?,javascript,Javascript,比如说 let obj = {1:"asd",2:"sad"}; obj[-1] = "g" 对象将是 {1:"asd",2:"sad",-1:"g"}, 我需要从一开始就输入-1键我认为使用对象作为数组是不明智的 无论如何,-1不是有效的索引键,这就是为什么它没有作为其他整数属性名排序。你不能真正依赖财产秩序 您可以在需要时按键对值进行排序: 让obj={1:“asd”,2:“sad”}; obj[-1]=“g” Object.keys(obj).sort((a,b)=>a-b).f

比如说

let obj = {1:"asd",2:"sad"};
obj[-1] = "g" 
对象将是

{1:"asd",2:"sad",-1:"g"}, 

我需要从一开始就输入-1键

我认为使用对象作为数组是不明智的

无论如何,
-1
不是有效的索引键,这就是为什么它没有作为其他整数属性名排序。你不能真正依赖财产秩序

您可以在需要时按键对值进行排序:

让obj={1:“asd”,2:“sad”};
obj[-1]=“g”

Object.keys(obj).sort((a,b)=>a-b).forEach(key=>console.log(key+'=>'+obj[key])默认情况下Javascript不会以这种方式运行。有一个很好的解释它是如何运作的

Javascript属性的顺序总是按时间顺序排列的,除非该属性是一个正整数,使其成为数组索引,并且它们排在第一位并按顺序排列-1不是正整数。它是一个字符串,所以它是按添加顺序来的。下面有一个片段证实了您报告的行为

让obj={};
obj[“ccccc”]=“ccccc”;
obj[“bbbbb”]=“bbbbb”;
obj[“aaaaa”]=“aaaaa”;
obj[10]=10;
obj[5]=5;
obj[“-2”]=-2;
obj[“-3”]=-3;
obj[-22]=22;
obj[0]=0;
console.log(Reflect.ownKeys(obj));

Object.keys(obj).sort().forEach(key=>console.log(key))
no,这是不可能的,因为像索引一样的键是先排序的。如果它们真的排序,那么-1必须是第一个键,从逻辑上讲,你永远不能依赖对象中的键顺序,它没有根据规范定义的顺序。使用数组代替主键有任务,解决它,但是负数并不像你所看到的那样有效。)@AyushGupta ES6规范确实如此。这取决于环境是否符合本规范。并非所有环境都是如此。