Javascript 对象属性在联机代码编辑器中按字母顺序排序
我创建了一个将所有数值属性相乘的函数。当我在在线代码编辑器JSFIDLE中工作时,菜单对象的属性按字母顺序排列得出奇:Javascript 对象属性在联机代码编辑器中按字母顺序排序,javascript,sorting,object,properties,alphabetical,Javascript,Sorting,Object,Properties,Alphabetical,我创建了一个将所有数值属性相乘的函数。当我在在线代码编辑器JSFIDLE中工作时,菜单对象的属性按字母顺序排列得出奇: let menu = { width: 200, height: 300, title: "My menu" }; let myF = obj => { for(let prop in obj){ if(typeof obj[prop] == "number" ){ obj[prop] *= 2} } } m
let menu = {
width: 200,
height: 300,
title: "My menu"
};
let myF = obj => { for(let prop in obj){
if(typeof obj[prop] == "number" ){
obj[prop] *= 2}
}
}
myF(menu);
console.log(menu);
我只是想知道为什么在线代码编辑器会这样做。另外,在我看来,在处理大量代码行时,此功能很容易误导,在这样的地方编写代码是一种坏习惯吗?for…in循环以任意顺序迭代对象的属性。您的代码不受顺序的影响。for…in循环以任意顺序迭代对象的属性。您的代码不受顺序的影响“for…in循环以任意顺序迭代对象的属性“-从ES2020开始。但是,当我在浏览器控制台中运行此代码时,对象属性按原始顺序排序。@ÖzgürCoşkuner这取决于fiddle使用的是哪个版本的ES,以及浏览器使用的是哪个版本。@str现在为了引擎之间的一致性,顺序可能是确定的,但这并不意味着现在应该将对象用作有序结构。@Bergi我同意,我不是有意暗示。“for…in循环以任意顺序迭代对象的属性”-从ES2020开始。但是,当我在浏览器控制台中运行此代码时,对象属性按原始顺序排序。@ÖzgürCoşkuner这取决于ES、fiddle使用的版本以及浏览器使用的版本。@str现在为了引擎之间的一致性,顺序可能是确定的,但这并不意味着现在应该将对象用作有序结构。@Bergi我同意,我不是有意暗示。你是说它们在源代码中被重新排序了吗?您可能按下了“Format code”(格式化代码)按钮,所选的格式化程序具有按字母顺序对简单对象进行排序的设置。不,它不会影响源代码。当我运行console.log(菜单)以查看最后的输出时,它只是在JSFIDLE和codepen的控制台中重新排序对象的属性。我不与这些格式按钮进行交互@好的。对象不是一个有序的数据结构,它们的打印顺序应该无关紧要。如果您想依赖迭代顺序,请使用
Map
。您是说它们在源代码中被重新排序了吗?您可能按下了“Format code”(格式化代码)按钮,所选的格式化程序具有按字母顺序对简单对象进行排序的设置。不,它不会影响源代码。当我运行console.log(菜单)以查看最后的输出时,它只是在JSFIDLE和codepen的控制台中重新排序对象的属性。我不与这些格式按钮进行交互@好的。对象不是一个有序的数据结构,它们的打印顺序应该无关紧要。如果您想依赖迭代顺序,请使用映射
。
{
height: 600,
title: "My menu",
width: 400
}