javascript对象的元素是按特定顺序初始化的吗?

时间:2015-05-08 11:53:06

标签: javascript node.js object

我有这样的功能:

parsers[1] = function(buf) {
    return {
        type: "init",
        name: buf.readUTF8String(),
        capacity: buf.readUInt32(),
        port: buf.readUInt16()
    };
}

我是否可以保证namecapacityport将一个接一个地初始化?否则,将以错误的顺序读取缓冲区。

我当然可以依靠:

parsers[1] = function(buf) {
    var ret = {type: "init"};
    ret.name = buf.readUTF8String();
    ret.capacity = buf.readUInt32();
    ret.port = buf.readUInt16();

    return ret;
}

2 个答案:

答案 0 :(得分:3)

感谢@joews的评论,我可以回答我自己的问题。

从链接11.1.5 Object initializer

  

<强>语法

     

ObjectLiteral

     
      
  • {}

  •   
  • {PropertyNameAndValueList}

  •   
  • {PropertyNameAndValueList,}

  •   
     

PropertyNameAndValueList

     
      
  • PropertyAssignment

  •   
  • PropertyNameAndValueList,PropertyAssignment

  •   

简而言之,对象构造函数将任何内容,初始化值列表或初始化值列表后跟逗号作为参数。

初始化值列表由PropertyAssignment或初始化值列表后跟PropertyAssignment组成,基本上是递归列表PropertyAssignment

现在问题出在上一个PropertyNameAndValueList , PropertyAssignment,是否有一个特定的顺序来评估这两个组件?

  

制作    PropertyNameAndValueList:PropertyNameAndValueList,PropertyAssignment   评估如下:

     
      
  1. obj成为评估 PropertyNameAndValueList 的结果。

  2.   
  3. propId成为评估 PropertyAssignment 的结果。

  4.   
  5. ...

  6.   

如果2.肯定会跟随1.,则会保证订单。

来自5.2 Algorithm conventions

  

规范通常使用编号列表来指定算法中的步骤。这些算法用于精确指定ECMAScript语言结构所需的语义。算法并不意味着暗示使用任何特定的实现技术。在实践中,可能有更有效的算法可用于实现给定的功能。

     

...

     

为了清晰表达,算法步骤可以细分为顺序子步骤。

因此,预期的初始化顺序是元素之后的元素,来自我可以收集的内容。

答案 1 :(得分:0)

和许多其他语言一样,我不会依赖任何&#34;命令&#34;对象的属性,或者初始化或赋值的方式。

如果&#34;外部&#34;顺序是必要的,我会尝试通过这些属性的映射来实现。