关于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 相关文章推荐
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 Javascript
JS鼠标事件大全 推荐收藏
Nov 01 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
Jan 08 Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 Javascript
Express之get,pos请求参数的获取
May 02 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
js实现图片轮播效果学习笔记
Jul 26 Javascript
Mac中安装nvm的教程分享
Dec 11 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
vue页面加载时的进度条功能(实例代码)
Jan 13 Javascript
vue实现移动端拖动排序
Aug 21 Javascript
ES6 十大特性简介
Dec 09 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输出Excel文件类
2010/02/08 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
javascript的内存管理详解
2013/08/07 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
AngularJS快速入门
2015/04/02 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
Python中bisect的用法
2014/09/23 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
小学优秀教育工作者事迹材料
2014/05/09 职场文书
环保专项行动方案
2014/05/12 职场文书
优秀员工演讲稿
2014/05/19 职场文书
优秀大学生自荐信
2014/06/09 职场文书
股东授权委托书范本
2014/09/13 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
婚宴新郎致辞
2015/07/28 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
Django框架模板用法详解
2022/06/10 Python
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技