关于JS数组追加数组采用push.apply的问题


Posted in Javascript onJune 09, 2014

a = new Array();
b = new Array(125624);                     
a.push.apply(a, b);

以上的代码在mac的chrome下抛出了如下的异常

Uncaught RangeError: Maximum call stack size exceeded

如果把数组改为b = new Array(125623);小一个元素居然就好了,测试了一下其他浏览器也都有大数组才出错的问题,但不同浏览器临界值还各异。

搜索了http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-existing-javascript-array/17368101#17368101 发现也有人遇到这样的坑:

Array.prototype.extend = function (other_array) {
    /* you should include a test to check whether other_array really is an array */
    other_array.forEach(function(v) {this.push(v)}, this);   
}

给出的建议是老老实实用forEach,不仅可以避免大数组的异常问题,并且从性能角度考虑forEach也是最快的

关于JS数组追加数组采用push.apply的问题

这个小坑给了我两点思考:

1、有些花哨的用法如a.push.apply(a, b);还是用于面试题装逼就行,实战上还是多走老实路线免得遇到异常和性能的坑,例如小数量的如这篇的这个几十个节点的3D网络拓扑弹簧布局例子玩玩倒是没问题,遇到真正大数据量如这篇中的HT for Web的这个3D大数据量性能例子才能考验出问题。

2、http://stackoverflow.com/questions/1374126 从stackoverflow找答案时不要仅盯着投票最多的,真理往往掌握在少数人手中,下图259票的回答是个坑,34票的才是最完美的分析:

关于JS数组追加数组采用push.apply的问题

关于JS数组追加数组采用push.apply的问题

 

Javascript 相关文章推荐
JavaScript中的对象化编程
Jan 16 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
Feb 03 Javascript
JavaScript程序中实现继承特性的方式总结
Jun 24 Javascript
深入探讨Vue.js组件和组件通信
Sep 12 Javascript
jQuery实现的无限级下拉菜单功能示例
Sep 12 Javascript
jQuery用FormData实现文件上传的方法
Nov 21 Javascript
微信小程序模板之分页滑动栏
Feb 10 Javascript
关闭Vue计算属性自带的缓存功能方法
Mar 02 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
Nov 14 Javascript
基于JavaScript实现十五拼图代码实例
Apr 26 Javascript
在react-antd中弹出层form内容传递给父组件的操作
Oct 24 Javascript
JavaScript中的宏任务和微任务详情
Nov 27 Javascript
javascript浏览器兼容教程之事件处理
Jun 09 #Javascript
jQuery学习笔记之toArray()
Jun 09 #Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 #Javascript
jQuery简易图片放大特效示例代码
Jun 09 #Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 #Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
Jun 09 #Javascript
js利用prototype调用Array的slice方法示例
Jun 09 #Javascript
You might like
PHP动态图像的创建
2006/10/09 PHP
php 保留小数点
2009/04/21 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
php实现的顺序线性表示例
2019/05/04 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
js获取url传值的方法
2015/12/18 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python的ORM框架中SQLAlchemy库的查询操作的教程
2015/04/25 Python
介绍Python的@property装饰器的用法
2015/04/28 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
Django实现单用户登录的方法示例
2019/03/28 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
Python基于locals返回作用域字典
2020/10/17 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
铭万公司.net面试题笔试题
2014/07/20 面试题
Python使用openpyxl复制整张sheet
2021/03/24 Python
佛光寺导游词
2015/02/10 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书