javascript对象的元素是否按特定顺序初始化?
我有一个这样的function:
parsers[1] = function(buf) { return { type: "init", name: buf.readUTF8String(), capacity: buf.readUInt32(), port: buf.readUInt16() }; }
我有任何保证, name
, capacity
和port
将被一个接一个地初始化吗? 否则,将以错误的顺序读取缓冲区。
我当然可以回顾一下:
parsers[1] = function(buf) { var ret = {type: "init"}; ret.name = buf.readUTF8String(); ret.capacity = buf.readUInt32(); ret.port = buf.readUInt16(); return ret; }
感谢@joews的评论,我可以回答我自己的问题。
从链接11.1.5对象初始值设定项 :
句法
ObjectLiteral :
{}
{PropertyNameAndValueList}
{PropertyNameAndValueList,}
PropertyNameAndValueList :
PropertyAssignment
PropertyNameAndValueList,PropertyAssignment
简而言之,对象的构造函数只需要一个参数,即没有任何东西,初始化值列表,或者是一个逗号后面的初始化值列表。
初始化值列表由一个PropertyAssignment
或一个初始化值列表,后跟一个PropertyAssignment
,基本上是recursion的PropertyAssignment
列表。
现在的问题是在最后一个PropertyNameAndValueList , PropertyAssignment
,是否有一个特定的顺序,在这两个组件进行评估?
生产PropertyNameAndValueList:PropertyNameAndValueList,PropertyAssignment的计算方法如下:
设
obj
是评估PropertyNameAndValueList的结果。让
propId
是评估PropertyAssignment的结果。…
订单将保证,如果2.
肯定遵循1.
。
从5.2algorithm约定 :
规范通常使用编号列表来指定algorithm中的步骤。 这些algorithm用于精确指定ECMAScript语言结构所需的语义。 这些algorithm并不意味着使用任何特定的实现技术。 实际上,可能有更高效的algorithm来实现给定的特征。
…
为了expression清楚,algorithm步骤可以细分为连续的子步骤。
所以,预期的初始化顺序是元素之后的元素,从我可以收集。
和许多其他语言一样,我不会依赖对象的任何“顺序”属性,也不会依赖于它们被初始化或赋值的方式。
如果一个“外部”命令是必要的,我会试图通过这些属性的映射来实现这一点。