代码之家  ›  专栏  ›  技术社区  ›  toraritte

数组“属性列表”的名称是什么?它们与简单对象有何不同?

  •  4
  • toraritte  · 技术社区  · 6 年前

    我在节点中玩的时候,不小心打错了花括号( {} )放在方括号里( [] )而是开始将变量用作简单对象。没有抛出错误,行为似乎是一样的,但当我用 Object.getPrototypeOf() 他们不一样。

    > var cake = [];
    > cake["is_a"] = "lie";
    
    > cake
    [ is_a: 'lie' ]
    
    > Object.getPrototypeOf(cake.is_a)
    [String: '']
    
    > Object.getPrototypeOf(cake)
    []
    
    > Object.getPrototypeOf({})
    {}
    

    然后我认为这是数组之上的一个语法糖,但不是:

    > cake[0]
    undefined
    

    它让我想起Elixir的关键字列表或Erlang的属性列表。它们叫什么?(这样我就可以进一步搜索。)这些是特定于节点的吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   toraritte    6 年前

    正如Pointy和Jaromanda X在问题注释中指出的那样,在JavaScript中,除了 primitives :

    最新的ECMAScript标准定义了七种数据类型:

    • 六种数据类型 原语 :

      • Boolean
      • Null
      • Undefined
      • Number
      • String
      • Symbol (ECMAScript 2015新增)
    • Object

    (另见相关问题。) Primitive value vs Reference value ).

    我的问题的代码样本具有欺骗性(至少对我来说),因为它看起来像数组本身存储了什么东西,但这只是节点REPL的表示(在Chrome的控制台上是相同的),而数组实际上是空的:

    > var cake = [];
    > cake["is_a"] = "lie";
    
    > cake
    [is_a: "lie"]
    
    > cake.length
    0