首页 > JavaScript中的数组new关键字到底有啥能力

JavaScript中的数组new关键字到底有啥能力

学习数组时突然产生了疑问,就是数组中的new关键字是干嘛用的呢,本质是什么,我只知道new可以创建数组,是算分配了空间吗?哪是多大的空间呢


new的过程分为四个步骤:

  1. 创建一个新对象

  2. 把构造函数里的this替换为这个新对象

  3. 执行构造函数

  4. 返回这个新对象

Array()其实是一个数组的构造函数,new Array的本质就是传给Array构造函数一些参数(也可以不传),创造一个新的Array实例。所以说,在js里,数组是一种对象。

如果还不理解的话,你可以看看《JavaScript高级程序设计》的引用类型那章。
总之,new的本质是一个对象实例化过程。


题主的描述有些不准确,数组中的new关键字 这里 new关键字是javascript提供的语法,可以用来创建对象。
准确的说是new关键字在创建数组的过程中起到了什么作用。
new关键字通常用来创建对象的。 在创建数组对象的时候跟创建其他对象所起到的作用一样。 通过复制构造函数内的属性和方法 加到新地址的对象上 并返回。
题主的问题很深入,估计是计算机专业的才会想这么深,具体内存中的操作是浏览器或后台脚本引擎(node环境)做的,浏览器大多是由c/c++编写的,那么当创建一个数组的时候如何分配地址就要参考各浏览器的源码,看看他们的具体实现。js本身操作内存的能力有限,即便是创建对象的new关键字语法,也很难预计会有多少内存开销,new关键字在这个过程中仅相当于一个包装的功能,具体过程可如以下代码描述:

function _new(/* constructor, param, ... */) {
    var args = [].slice.call(arguments);
    var constructor = args.shift();
    var context = Object.create(constructor.prototype);
    var result = constructor.apply(context, args);
    
    return (typeof result === 'object' && result != null) ? result : context;
}
var array = _new(Array, 1,2,3);
console.log(array); // [1,2,3]

这段代码引用自

new关键字的底层实现原理
https://.com/u/manxisuo


你可以看看:
http://www.dewen.net.cn/q/2418/js%E9%87%8C+%E5%AE%9A%E4%B9%89%E6%95%B0%E7%BB%84[]%E5%92%8Cnew+array()%E7%9A%84%E7%96%91%E9%97%AE


这里说array只是特殊的object(有length和其他的一些方法)。创建array时不会预分配内存
http://stackoverflow.com/questions/20321047/how-are-javascript-arrays-represented-in-physical-memory

【热门文章】
【热门文章】