关于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异步调用页面后台方法‏(asp.net)
Mar 01 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
Oct 29 Javascript
简单的ajax连接库分享(不用jquery的ajax)
Jan 19 Javascript
用JavaScript实现类似于ListBox功能示例代码
Mar 09 Javascript
Boostrap实现的登录界面实例代码
Oct 09 Javascript
Bootstrap实现导航栏的2种方式
Nov 28 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
Dec 14 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
May 12 Javascript
Node.js Buffer用法解读
May 18 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 Javascript
何时使用Map来代替普通的JS对象
Apr 29 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
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
重定向实现代码
2006/11/20 Javascript
javascript 写类方式之四
2009/07/05 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
js实现简单的验证码
2015/12/25 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
js实现录音上传功能
2019/11/22 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
Python的re模块正则表达式操作
2016/05/25 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
描述RIP和OSPF区别以及特点
2015/01/17 面试题
领导的自我鉴定
2013/12/28 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
党员干部一句话承诺
2014/05/30 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书