JavaScript中的数组new关键字到底有啥能力
学习数组时突然产生了疑问,就是数组中的new关键字是干嘛用的呢,本质是什么,我只知道new可以创建数组,是算分配了空间吗?哪是多大的空间呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
学习数组时突然产生了疑问,就是数组中的new关键字是干嘛用的呢,本质是什么,我只知道new可以创建数组,是算分配了空间吗?哪是多大的空间呢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
题主的描述有些不准确,
数组中的new关键字
这里 new关键字是javascript提供的语法,可以用来创建对象。准确的说是new关键字在创建数组的过程中起到了什么作用。
new关键字通常用来创建对象的。 在创建数组对象的时候跟创建其他对象所起到的作用一样。 通过复制构造函数内的属性和方法 加到新地址的对象上 并返回。
题主的问题很深入,估计是计算机专业的才会想这么深,具体内存中的操作是浏览器或后台脚本引擎(node环境)做的,浏览器大多是由c/c++编写的,那么当创建一个数组的时候如何分配地址就要参考各浏览器的源码,看看他们的具体实现。js本身操作内存的能力有限,即便是创建对象的new关键字语法,也很难预计会有多少内存开销,new关键字在这个过程中仅相当于一个包装的功能,具体过程可如以下代码描述:
这段代码引用自
new的过程分为四个步骤:
创建一个新对象
把构造函数里的this替换为这个新对象
执行构造函数
返回这个新对象
Array()其实是一个数组的构造函数,new Array的本质就是传给Array构造函数一些参数(也可以不传),创造一个新的Array实例。所以说,在js里,数组是一种对象。
如果还不理解的话,你可以看看《JavaScript高级程序设计》的引用类型那章。
总之,new的本质是一个对象实例化过程。
这里说array只是特殊的object(有length和其他的一些方法)。创建array时不会预分配内存
http://stackoverflow.com/questions/20321047/how-are-javascript-arrays-represented-in-physical-memory
你可以看看:
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