关于数组:使用{}或新的Object()在JavaScript中创建一个空对象?

Create an empty object in JavaScript with {} or new Object()?

在javascript中创建空对象有两种不同的方法:

1
2
var objectA = {}
var objectB = new Object()

脚本引擎处理它们的方式有什么不同吗?有没有理由把一个用在另一个上面?

同样,也可以使用不同的语法创建空数组:

1
2
var arrayA = []
var arrayB = new Array()


物体

使用new Object();没有好处,而{};可以使代码更紧凑、更可读。

对于定义空对象,它们在技术上是相同的。EDCOX1的1语法是更短的,更整洁的(更少的Java ISH),并且允许您立即填充对象,如:

1
2
3
4
5
6
var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

数组

对于阵列,使用new Array();比使用[];几乎没有任何好处,只有一个小的例外:

1
var emptyArray = new Array(100);

创建一个100项长的数组,其中所有插槽都包含undefined,在某些情况下(如(new Array(9)).join('Na-Na ') + 'Batman!')可能很好/很有用。

我的建议

  • 千万不要使用new Object();,它比更笨重,看起来很傻。
  • 始终使用[];—除非需要快速创建一个具有预定义长度的"空"数组。

  • 是的,有区别,它们不一样。的确,你会得到相同的结果,但引擎的工作方式对两者都不同。其中一个是对象文本,另一个是构造函数,这是用JavaScript创建对象的两种不同方法。

    1
    2
    3
    var objectA = {} //This is an object literal

    var objectB = new Object() //This is the object constructor

    在JS中,一切都是一个对象,但是您应该注意new object()中的以下内容:它可以接收一个参数,并且根据该参数,它将创建一个字符串、一个数字或只是一个空对象。

    例如:new Object(1)将返回一个数字。new Object("hello")将返回一个字符串,这意味着对象构造函数可以将对象创建委托给字符串、数字等其他构造函数,具体取决于参数。在管理动态数据以创建对象时,记住这一点非常重要。

    许多作者建议,当您可以使用某种文字表示法时,不要使用对象构造函数,这样您就可以确保您正在创建的内容是您希望在代码中具有的内容。

    我建议您进一步阅读Javascript上的文字表示法和构造函数之间的区别,以了解更多详细信息。


    这些都有相同的最终结果,但我想简单地补充一下,使用文本语法可以帮助人们习惯JSON的语法(JavaScript文本对象语法的字符串化子集),因此这可能是一个很好的实践。

    另一件事是:如果忘记使用new运算符,可能会出现细微的错误。所以,使用文本将帮助您避免这个问题。

    最终,这将取决于形势和偏好。


    数组实例化性能

    如果要创建不带长度的数组:

    var arr = [];var arr = new Array();

    如果要创建具有特定长度的空数组:

    var arr = new Array(x);var arr = []; arr[x-1] = undefined快;

    对于基准测试,请单击以下内容:https://jsfiddle.net/basickarl/ktbbry5b/

    但是我不知道这两者的内存足迹,我可以想象,new Array()占用了更多的空间。


    我相信在这里的一个javascript视频中推荐使用{}作为一种良好的编码约定。对于伪经典继承,new是必要的。var obj = {};方法有助于提醒您,这不是经典的面向对象语言,而是原型语言。因此,您真正需要new的唯一时间是使用构造函数函数时。例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var Mammal = function (name) {
      this.name = name;
    };

    Mammal.prototype.get_name = function () {
      return this.name;
    }

    Mammal.prototype.says = function() {
      return this.saying || '';
    }

    然后它的用法如下:

    1
    2
    var aMammal = new Mammal('Me warm-blooded');
    var name = aMammal.get_name();

    new Object相反,使用{}的另一个优点是可以使用它来执行JSON样式的对象文本。


    对象和数组文字语法/[]是在javascript 1.2中引入的,因此在4.0之前的Netscape Navigator版本中不可用(并且会产生语法错误)。

    我的手指仍然默认说new array(),但我是一个非常老的人。值得庆幸的是,Netscape 3不是许多人今天必须考虑的浏览器…


    1
    var objectA = {}

    速度快得多,根据我的经验,更常用,所以最好采用"标准"并保存一些输入。


    这基本上是一样的。用任何你觉得方便的东西。


    好吧,有两种不同的方法来做同样的事情!一个叫做object literal,另一个是函数constructor

    但请继续阅读,我想分享以下几点:

    使用{}可以提高代码的可读性,同时创建不推荐使用的Object或其他内置函数的实例…

    另外,对象函数得到参数,因为它是一个函数,比如Object(params)。但{}是用javascript启动对象的纯方法…

    使用object-literal可以使代码看起来更干净,更容易被其他开发人员阅读,并且它与JavaScript中的最佳实践是内联的…

    虽然javascript中的对象几乎可以是任何东西,但{}只指向javascript对象,为了测试它的工作方式,请在javascript代码或控制台中执行以下操作:

    1
    var n = new Object(1); //Number {[[PrimitiveValue]]: 1}

    令人惊讶的是,它创造了一个数字!

    1
    var a = new Object([1,2,3]); //[1, 2, 3]

    这是在创建一个数组!

    1
    var s = new Object('alireza'); //String {0:"a", 1:"l", 2:"i", 3:"r", 4:"e", 5:"z", 6:"a", length: 7, [[PrimitiveValue]]:"alireza"}

    这对String来说是个奇怪的结果!

    因此,如果您正在创建一个对象,建议使用对象文字,使用标准代码并避免类似于上面的任何代码事故,使用{}在性能方面更好!