关于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中parents()和parent()的区别分析
Oct 28 Javascript
浅谈JavaScript 标准对象
Jun 02 Javascript
纯JavaScript手写图片轮播代码
Oct 20 Javascript
JS实现探测网站链接的方法【测试可用】
Nov 08 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
Feb 14 Javascript
create-react-app修改为多页面支持的方法
May 17 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
React-router4路由监听的实现
Aug 07 Javascript
JS实现的RC4加密算法示例
Aug 16 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
vue vant中picker组件的使用
Nov 03 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
smarty获得当前url的方法分享
2014/02/14 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP单例模式详细介绍
2015/07/01 PHP
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
js form action动态修改方法
2008/11/04 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
ES10 特性的完整指南小结
2019/03/04 Javascript
Python中关键字is与==的区别简述
2014/07/31 Python
python hook监听事件详解
2018/10/25 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
Python简单I/O操作示例
2019/03/18 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
广州一家公司的.NET面试题
2016/06/11 面试题
副厂长岗位职责
2014/02/02 职场文书
竞聘上岗演讲
2014/05/19 职场文书
低碳环保标语
2014/06/12 职场文书
优秀教师事迹材料
2014/12/15 职场文书
2016年父亲节寄语
2015/12/04 职场文书
解决Python字典查找报Keyerror的问题
2021/05/26 Python
详解在OpenCV中如何使用图像像素
2022/03/03 Python