提问人:Jonas Pegerfalk 提问时间:10/31/2008 最后编辑:AlirezaJonas Pegerfalk 更新时间:2/12/2023 访问量:723766
在 JavaScript 中使用 {} 或 new Object() 创建一个空对象?
Create an empty object in JavaScript with {} or new Object()?
问:
在 JavaScript 中创建空对象有两种不同的方法:
var objectA = {}
var objectB = new Object()
脚本引擎处理它们的方式有什么区别吗?有什么理由使用一个而不是另一个?
同样,也可以使用不同的语法创建一个空数组:
var arrayA = []
var arrayB = new Array()
答:
这本质上是一回事。使用任何您认为更方便的东西。
评论
Object
{}
Object
Object
(new Object()).constructor === ({}).constructor
-> true
new Object()
{}
这些具有相同的最终结果,但我只想补充一点,使用文字语法可以帮助人们习惯 JSON 的语法(JavaScript 文字对象语法的字符串化子集),因此这可能是一个很好的做法。
另一件事:如果您忘记使用运算符,您可能会遇到细微的错误。因此,使用文字将帮助您避免该问题。new
最终,这将取决于情况和偏好。
var objectA = {}
速度要快得多,而且根据我的经验,更常用,所以最好采用“标准”并节省一些打字时间。
评论
new Object
对象和数组文本语法 {}/[] 是在 JavaScript 1.2 中引入的,因此在 4.0 之前的 Netscape Navigator 版本中不可用(并且会产生语法错误)。
我的手指仍然默认说 new Array(),但我是一个非常老的人。 值得庆幸的是,Netscape 3 并不是今天许多人必须考虑的浏览器......
评论
我相信在这里的一个 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();
使用 as oppose to 的另一个优点是您可以使用它来执行 JSON 样式的对象文字。{}
new Object
对象
使用 没有任何好处,而可以使您的代码更紧凑、更易读。new Object()
{}
对于定义空对象,它们在技术上是相同的。语法更短、更整洁(不那么像 Java 一样),并允许您立即内联填充对象 - 如下所示:{}
var myObject = {
title: 'Frog',
url: '/img/picture.jpg',
width: 300,
height: 200
};
阵 列
对于数组来说,同样,使用超过也几乎没有任何好处——除了一个小例外:new Array()
[]
var emptyArray = new Array(100);
创建一个 100 项长的数组,其中所有插槽都包含 ,这在某些情况下可能很好/有用(例如 )。undefined
(new Array(9)).join('Na-Na ') + 'Batman!'
我的建议
- 永远不要使用——它比它更笨拙,而且看起来很傻。
new Object();
{}
- 始终使用 — 除非您需要快速创建具有预定义长度的“空”数组。
[]
评论
new Array(100)
[]
new Array(100)
new Array(1,2,3)
[1,2,3]
new Array(1)
[1]
Array
Object.create(null)
{ }
是的,有区别,它们不一样。的确,你会得到相同的结果,但引擎对两者的工作方式不同。其中一个是对象文字,另一个是构造函数,这是在 javascript 中创建对象的两种不同方式。
var objectA = {} //This is an object literal
var objectB = new Object() //This is the object constructor
在 JS 中,一切都是一个对象,但你应该注意 new Object() 的以下几点: 它可以接收一个参数,并且根据该参数,它将创建一个字符串、一个数字或只是一个空对象。
例如:,将返回一个 Number。 将返回一个字符串,这意味着对象构造函数可以根据参数将对象创建委托给其他构造函数,如字符串、数字等......在管理动态数据以创建对象时,请务必牢记这一点。new Object(1)
new Object("hello")
许多作者建议不要使用对象构造函数,因为你可以改用特定的文字表示法,这样你就可以确保你正在创建的内容是你期望在代码中包含的内容。
我建议您进一步阅读 javascript 上的文字符号和构造函数之间的差异,以找到更多详细信息。
评论
数组实例化性能
如果要创建一个没有长度的数组:
var arr = [];
比 var arr = new Array() 快;
如果要创建具有一定长度的空数组:
var arr = 新数组(x);
比 var 快 arr = []; arr[x-1] = undefined;
对于基准,请单击以下内容: https://jsfiddle.net/basickarl/ktbbry5b/
但是我不知道两者的内存占用,我可以想象新的 Array()
会占用更多空间。
评论
arr = new Array(x)
等价于 ,而不是用 分配索引。arr = []; arr.length = x;
x-1
undefined
好的,只有 2 种不同的方法可以做同样的事情!一个叫,另一个是函数!object literal
constructor
但请继续阅读,我想分享几件事:
使用使您的代码更具可读性,同时创建不推荐的实例或其他内置函数......{}
Object
此外,Object 函数获取参数,因为它是一个函数,例如......但这是在 JavaScript 中启动对象的纯粹方法......Object(params)
{}
使用对象文字使你的代码看起来更干净,更易于其他开发人员阅读,并且它与 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
因此,如果您正在创建对象,建议使用对象字面量,以具有标准代码并避免任何如上所述的代码事故,而且根据我的经验,性能明智的使用更好!{}
评论
Var Obj = {};
这是最常用和最简单的方法。
用
var Obj = new Obj()
不是首选。
没有必要使用 .new Object()
为了简单、可读性和执行速度,请使用第一个方法(对象文本方法)。
评论
上一个:Java 对象到 XML 模式
评论
var objectA = {} var objectB = new Object()
var objectC = Object.create(Object.prototype);
{}
和 Use 而不是 。使用 代替 。当成员名称是连续整数时,使用数组。当成员名称是任意字符串或名称时,请使用对象。源[]
{}
new Object()
[]
new Array()
new Object()
并且不是完全空的对象,它们是具有 Object.prototype 的对象。你可以用于一个真正的空对象(至少根据mozilla文档:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...{}
Object.create(null)
)