【问题标题】:What’s the difference between “{}” and “[]” while declaring a JavaScript array?声明 JavaScript 数组时,“{}”和“[]”有什么区别?
【发布时间】:2016-02-04 12:54:34
【问题描述】:

声明 JavaScript 数组时,“{}”和“[]”有什么区别? 通常我声明喜欢

var a=[];

数组声明为var a={}是什么意思

【问题讨论】:

  • var a = {}; 是一个对象-键-值对。 var a = []; 是存储在顺序索引中的数组值。
  • 您在使用{} 时不是在创建数组,而是在创建object
  • 确切的问题是什么? objectarray 的区别?你想做什么?添加更多代码
  • 我想知道 [] 和 {} 声明之间的区别,我得到了你的答案@Tushar
  • 答案是 []{} 声明了不同的东西,如 dup 中所述。{} 不是数组。

标签: javascript arrays object javascript-objects declaration


【解决方案1】:

似乎没有人解释数组和对象之间的区别。

[] 正在声明一个数组。

{} 正在声明一个对象。

数组具有对象的所有特性和附加特性(您可以将数组视为对象的子类),其中在 Array 子类中添加了附加方法和功能。其实typeof [] === "object"是为了进一步告诉你数组是一个对象。

附加功能包括一个神奇的.length 属性,用于跟踪数组中的项目数,以及一系列操作数组的方法,例如.push().pop().slice().splice()等...可以看到数组方法列表here

对象使您能够将属性名称与值相关联,如下所示:

var x = {};
x.foo = 3;
x["whatever"] = 10;
console.log(x.foo);      // shows 3
console.log(x.whatever); // shows 10

可以通过x.foo 语法或类似数组的语法x["foo"] 访问对象属性。后一种语法的优点是您可以使用变量作为属性名称,例如x[myvar],使用后一种语法,您可以使用包含 Javascript 在x.foo 语法中不允许使用的字符的属性名称。

属性名称可以是任何字符串值。


数组是一个对象,因此它具有对象的所有相同功能,以及一系列用于管理 有序顺序编号索引列表的附加功能0 并达到一定的长度。数组通常用于按数字索引访问的有序项目列表。而且,由于数组是有序的,因此有许多有用的功能可以管理列表.sort() 的顺序或从列表中添加或删除内容。

【讨论】:

  • 为什么[].可以,{}.不行?
  • @SurajJain - 我不明白它的上下文。也许您应该编写自己的问题并解释您正在尝试做的事情的整体背景。
  • 实际上,我们可以使用空数组字面量(如 [].splice 等)对数组做任何我们可以做的事情,但使用空对象字面量 {} 我们不是,就像我做 @987654341 一样@it 出错了,为什么会这样?
  • @SurajJain - 它可能与上下文中的语言语法有关,因为{} 也表示一个新块,因此您不能使用它来表示上下文中的对象,它可能意味着新块或其含义可能不明确的地方。你可以做let val = {value: true}.hasOwnProperty("value"); console.log(val);
  • 是的,可能是这样,它也意味着一个新的块。感谢您的澄清。
【解决方案2】:

当你声明时

var a=[];

您正在声明一个空数组。

但是当你声明时

var a={};

你正在声明一个对象。

虽然Array在Javascript中也是Object,但它是数字键配对值。 它具有对象的所有功能,但添加了一些 Array 的方法,如 Push、Splice、Length 等。

因此,如果您想要一些需要使用数字键的值,请使用数组。 否则使用对象。 你可以像这样创建对象:

var a={name:"abc",age:"14"}; 

并且可以访问类似的值

console.log(a.name);

【讨论】:

  • 感谢您的回答@Mytri
  • 如何创建实例和访问键值对
  • 一个小示例代码对我非常有用@Tushar
  • 示例很有用@Mytri
  • @Venkat var arr = ['A', 'B']; console.log(arr[0]) // Avar obj = { name: 'A', surname: 'B'}; console.log(obj.name); // A OR console.log(obj['name'])
【解决方案3】:
var a = [];

它用于简单值数组的括号。 例如。

var name=["a","b","c"]

var a={}

也用于值数组和对象/属性。 例如。

var programmer = { 'name':'special', 'url':'www.google.com'}

【讨论】:

    【解决方案4】:

    可以这样理解:

    var a= []; //creates a new empty array
    var a= {}; //creates a new empty object
    

    你也可以理解

    var a = {}; 等价于var a= new Object();

    注意:

    当您对集合中元素(相同类型)的顺序感到困扰时,您可以使用数组,否则您可以使用对象。在对象中,不保证顺序。

    【讨论】:

    • 那么数组和对象有什么区别呢?
    • @RahulTripathi nnnnnn 表示您还应该解释它们之间的区别以及何时应该使用数组与对象
    • @nnnnnn, Tushar 无论如何这都是噪音,这不是问题,也不应该是。这是一个单独的答案,应该在一个单独的问题中。
    • 当需要集合中元素的顺序时,您可以使用数组,当顺序不重要时,我们可以使用对象。
    【解决方案5】:

    它们是两个不同的东西..

    [] 正在声明一个数组:
    给定,由数字索引保存的元素列表。

    {} 正在声明一个新对象:
    给定一个对象,其字段具有名称和类型+值,
    有些人喜欢将其视为“关联数组”。 但不是数组,在它们的表示中。

    您可以阅读更多@This Article

    【讨论】:

      【解决方案6】:

      JSON 语法

      对象 = {} | {成员}

      • 成员 = 对 |对,成员
      • 对 = 字符串:值

      数组 = [] | [元素]

      • 元素 = 价值 |价值元素

      值 = 字符串|数字|对象|数组|真|假|空

      【讨论】:

        【解决方案7】:

        在 JavaScript 中,数组和对象实际上非常相似,尽管在外观上它们可能看起来有点不同。

        对于数组:

        var array = [];
        array[0] = "hello";
        array[1] = 5498;
        array[536] = new Date();
        

        如您所见,JavaScript 中的数组可以是稀疏的(有效的索引不必是连续的)并且它们可以包含 任何 类型的变量!挺方便的。

        但我们都知道 JavaScript 很奇怪,所以这里有一些奇怪的地方:

        array["0"] === "hello"; // This is true
        array["hi"]; // undefined
        array["hi"] = "weird"; // works but does not save any data to array
        array["hi"]; // still undefined!
        

        这是因为 JavaScript 中的一切都是对象(这就是为什么您也可以使用 new Array() 创建数组的原因)。结果,数组中的每个索引都变成了字符串,然后存储在对象中,因此数组只是一个对象,不允许任何人使用非正整数的键存储任何内容。

        那么什么是对象?

        JavaScript 中的对象就像数组,但“索引”可以是任何字符串。

        var object = {};
        object[0] = "hello"; // OK
        object["hi"] = "not weird"; // OK
        

        您甚至可以选择在处理对象时不使用方括号!

        console.log(object.hi); // Prints 'not weird'
        object.hi = "overwriting 'not weird'";
        

        您可以更进一步,像这样定义对象:

        var newObject = {
            a: 2,
        };
        newObject.a === 2; // true
        

        【讨论】:

        • 但在最新的 chrome 和 firefox 版本中array["hi"] = "weird"; array["hi"];// gives output as weird
        【解决方案8】:

        [ ] - 当我们声明一个空数组时使用它,

        { } - 当我们声明一个空对象时使用它

        typeof([ ]) //object
        
        typeof({ }) //object
        

        但是如果你跑了

        [ ].constructor.name  //Array
        

        所以从这里你会明白它是一个数组,这里数组是基类的名称。 JavaScript Array 类是一个全局对象,用于构建数组,这些数组是高级的、类似列表的对象。

        【讨论】:

          猜你喜欢
          • 2014-06-26
          • 2012-04-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-27
          相关资源
          最近更新 更多