Javascript Do Object.keys()和Object.values()方法返回保持相同顺序的数组

Javascript Do Object.keys()和Object.values()方法返回保持相同顺序的数组,javascript,Javascript,和方法是否返回保持相同顺序的数组 prop1 prop2 Foo Bar 我的意思是,假设我们有以下对象: var obj = {}; obj.prop1 = "Foo"; obj.prop2 = "Bar"; 如果我调用obj.keys()和obj.values()它们会以相同的顺序返回属性吗 prop1 prop2 Foo Bar 或 对吧? 所以下面的选项是不可能的,对吗 prop1 prop2 Bar Foo 简而言之,是 和(和)都通过对象上的in循环中的进行枚举。 由于

和方法是否返回保持相同顺序的数组

prop1
prop2

Foo
Bar
我的意思是,假设我们有以下对象:

var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
如果我调用
obj.keys()
obj.values()
它们会以相同的顺序返回属性吗

prop1
prop2

Foo
Bar

对吧?

所以下面的选项是不可能的,对吗

prop1
prop2

Bar
Foo

简而言之,

和(和)都通过对象上的in循环中的
进行枚举。
由于两者使用相同的方法,只要在具有相同未更改的自身原型的对象上调用它们(不在
调用之间删除或添加键),顺序将是相同的

订单是什么?
它取决于和对象。
如果实际顺序对您也很重要(而且不仅
结果的顺序相同),防弹方法将是使用数组


另一种方法:将返回
[键,值]
对的列表(与
for in
循环提供的顺序相同),这可能对您的用例更有帮助。

只要对象上的属性按该顺序定义,并且除了它们的值之外,没有任何更改,它就会保持索引顺序,你会得到那份订单的。因此,建议提前定义对象将具有的所有属性,并将未知值最初设置为null。请注意,许多浏览器调试器按字母顺序显示对象的道具,因此如果您在控制台中检查元素,您可能会得到一个不同于对象定义实际顺序的顺序。@Shilly“是按该顺序定义的”-定义顺序对对象来说并不重要,在所有实际用途中,属性必须始终被视为无序。如果在调用两个方法之间对对象没有任何更改,则它们的顺序将始终相同
顺序是固定的
是和否,取决于您的意思。。。尝试
varx={b:1,a:2};console.log(Object.keys(x));删除x.b;x、 b=1;console.log(Object.keys(x))。。。但是,在每个console.log上,Object.keys和Object.values的顺序将相同