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

发布于 2022-09-02 11:46:20 字数 76 浏览 15 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

乖乖公主 2022-09-09 11:46:20

题主的描述有些不准确,数组中的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://segmentfault.com/u/manxisuo

两相知 2022-09-09 11:46:20

new的过程分为四个步骤:

  1. 创建一个新对象

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

  3. 执行构造函数

  4. 返回这个新对象

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

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

柠栀 2022-09-09 11:46:20

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文