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

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

脚本引擎如何处理它们有什么不同?有没有理由使用其中一个?

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

var arrayA = []
var arrayB = new Array()
有帮助吗?

解决方案

物件

使用 new Object(); 没有任何好处 - 而 {}; 可以使您的代码更紧凑,更易读。

为了定义空对象,它们在技术上是相同的。 {} 语法更短,更整洁(更少Java-ish),并允许您立即填充内联对象 - 如下所示:

var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

阵列

对于数组,使用 new Array(); 而不是 []; - 几乎没有任何好处 - 只有一个小例外:

var emptyArray = new Array(100);

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

我的推荐

  1. 永远不要使用 new Object(); - 它比'{}'更笨拙,看起来很傻。
  2. 除非您需要快速创建“空”,否则请始终使用 []; 。具有预定义长度的数组。

其他提示

是的,有区别,它们不一样。确实,你会得到相同的结果,但引擎的工作方式不同。其中一个是对象文字,另一个是构造函数,两种不同的方式在javascript中创建对象。

var objectA = {} //This is an object literal

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

在JS中,一切都是一个对象,但你应该注意新的Object():它可以接收一个参数,并且根据该参数,它将创建一个字符串,一个数字,或者只是一个空对象

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

许多作者建议您在使用某种文字符号时不要使用对象构造函数,在那里您将确保您创建的内容是您希望在代码中使用的内容。

我建议你进一步阅读关于javascript的文字符号和构造函数之间的差异,以找到更多细节。

这些具有相同的最终结果,但我只想补充一点,使用文字语法可以帮助人们习惯JSON(JavaScript字面对象语法的字符串ified子集)的语法,因此它可能是一个好习惯进入。

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

最终,这取决于具体情况和偏好。

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

我的手指仍默认说新的Array(),但我是一个非常老的人。值得庆幸的是,Netscape 3不是今天很多人都要考虑的浏览器......

var objectA = {}

更快,根据我的经验,更常用,所以最好采用'标准'并节省一些打字。

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

var Mammal = function (name) {
  this.name = name;
};

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

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

然后就像这样使用:

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

使用 {} 作为 new Object 的另一个好处是可以使用它来执行JSON样式的对象文字。

数组实例化性能

如果你想创建一个没有长度的数组:

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

更快

如果您希望创建一个具有一定长度的空数组:

var arr = new Array(x); var arr = []更快; arr [x-1] =未定义;

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

我不知道两者的内存占用,我可以想象 new Array()会占用更多空间。

这基本上是一回事。使用你觉得比较方便的任何东西。

好的,只有两种不同的方法可以做同样的事情!一个叫 object literal ,另一个是函数构造函数

但请继续阅读,我想分享几件事:

使用 {} 使您的代码更具可读性,同时创建 Object 的实例或其他不推荐的内置函数...

此外,Object函数获取参数,因为它是一个函数,如 Object(params) ...但 {} 是在JavaScript中启动对象的纯粹方法。

使用object literal可以让您的代码看起来更清晰,更容易阅读其他开发人员,并且它与JavaScript中的最佳实践一致...

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

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

令人惊讶的是,它正在创建一个数字!

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

这就是创建一个阵列!

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

的奇怪结果

因此,如果您正在创建一个对象,建议使用对象文字,以获得标准代码并避免上述任何代码意外,使用 {} 进行性能优化在我的经验中更好!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top