关于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 相关文章推荐
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
Feb 07 Javascript
精心挑选的15个jQuery下拉菜单制作教程
Jun 15 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
Mar 05 Javascript
JavaScript不刷新实现浏览器的前进后退功能
Nov 05 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
Apr 06 Javascript
node.js发送邮件email的方法详解
Jan 06 Javascript
js实现手机web图片左右滑动效果
Dec 29 Javascript
利用layer实现表单完美验证的方法
Sep 26 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
Dec 02 Javascript
js回调函数仿360开机
Dec 26 Javascript
Vue自定义组件的四种方式示例详解
Feb 28 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 jQuery
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中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
javascript引导程序
2008/10/26 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
Python操作CouchDB数据库简单示例
2015/03/10 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python 多核并行计算的示例代码
2017/11/07 Python
python如何实现内容写在图片上
2018/03/23 Python
Python多线程获取返回值代码实例
2020/02/17 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
Ajax的优点和缺点
2014/11/21 面试题
班组长安全生产职责
2013/12/16 职场文书
节水标语大全
2014/06/11 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
财务个人年度总结范文
2015/02/26 职场文书
导游词之阆中古城
2019/12/23 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript