关于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 png 透明解决方案(推荐)
Aug 21 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
Feb 17 Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
Apr 14 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
node.js的http.createServer过程深入解析
Jun 06 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 Javascript
vue如何使用async、await实现同步请求
Dec 09 Javascript
vue.js iview打包上线后字体图标不显示解决办法
Jan 20 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 中执行系统外部命令
2006/10/09 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
python共享引用(多个变量引用)示例代码
2013/12/04 Python
python处理json数据中的中文
2014/03/06 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Python与R语言的简要对比
2017/11/14 Python
zookeeper python接口实例详解
2018/01/18 Python
python实现简单五子棋游戏
2019/06/18 Python
简单介绍python封装的基本知识
2019/08/10 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
python redis存入字典序列化存储教程
2020/07/16 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
高三地理教学反思
2014/01/11 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
走进敬老院活动总结
2014/07/10 职场文书
社区两委对照检查材料
2014/08/23 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
保外就医申请书范文
2015/08/06 职场文书
升职自荐书
2019/05/09 职场文书