关于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 相关文章推荐
精通JavaScript 纠正 cleanWhitespace函数
Mar 11 Javascript
jQuery对象与DOM对象之间的转换方法
Apr 15 Javascript
JavaScript词法作用域与调用对象深入理解
Nov 29 Javascript
JS与C#编码解码
Dec 03 Javascript
利用jQuery实现可以编辑的表格
May 26 Javascript
Jquery焦点图实例代码
Nov 25 Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
Jul 19 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
js断点调试经验分享
Dec 08 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
Jun 11 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下统计用户在线时间的一种尝试
2010/08/26 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
ucenter通信原理分析
2015/01/09 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
深入理解Python3 内置函数大全
2017/11/23 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
python tkinter界面居中显示的方法
2018/10/11 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
详解python 中in 的 用法
2019/12/12 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
Python实现一个论文下载器的过程
2021/01/18 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
企业统计员岗位职责
2013/12/13 职场文书
门诊手术室工作制度
2014/01/30 职场文书
社区健康教育实施方案
2014/03/18 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
女生节标语
2014/06/26 职场文书
幸福中国演讲稿
2014/09/12 职场文书
北京导游词
2015/02/12 职场文书
十二生肖观后感
2015/06/12 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书