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的顺序将相同