JavaScript是否在声明期间保证对象属性顺序?

时间:2018-02-02 02:02:53

标签: javascript javascript-objects

例如:



var f=function(str){
  console.log(str);
  return str;
};
var obj={
  a:f('value A'),
  b:f('value B'),
};

//some other code




是否保证

value A
value B

而不是

value B
value A
打印

注意:我询问f()的执行顺序,而不是Object.keys(obj)的键顺序。

1 个答案:

答案 0 :(得分:1)

尽管这显然是Does JavaScript Guarantee Object Property Order?的重复,但我还是会继续回答。

您的"无序的属性集合中有零保证"。但是,对于Javascript的现代实现,您可以预期属性通常按照您定义的顺序排列。

只要预期的顺序是可取的,但并不重要,在大多数情况下,假设它们是有序的是合理的。但如果您的业务逻辑依赖于该订单得到保证,那么您肯定需要重新考虑您的策略。

好。我现在看到你实际上在问什么。在这个特定的背景下,答案是"是和否#34;。

在定义对象时,会静态调用您的函数。因此,函数定义属性b将始终在函数定义属性console.log之前调用。

但是,value A是一个异步函数,您不能依赖它来记录value B之前记录{{1}}