关于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 相关文章推荐
node.js不得不说的12点内容
Jul 14 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
javascript原型链继承用法实例分析
Jan 28 Javascript
DOM 高级编程
May 06 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
JS实现回到页面顶部动画效果的简单实例
May 24 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
Jan 10 Javascript
Vue的MVVM实现方法
Aug 16 Javascript
Node.js爬取豆瓣数据实例分析
Mar 05 Javascript
vue 实现滚动到底部翻页效果(pc端)
Jul 31 Javascript
JS实现分页导航效果
Feb 19 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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
获取Django项目的全部url方法详解
2017/10/26 Python
用python实现刷点击率的示例代码
2019/02/21 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
python 进程池pool使用详解
2020/10/15 Python
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
幼儿园教师自我鉴定
2014/03/20 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
高中运动会广播稿
2014/09/16 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
统计员岗位职责范本
2015/04/14 职场文书
电影地道战观后感
2015/06/04 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js