关于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 相关文章推荐
文本框获得焦点和失去焦点的判断代码
Mar 18 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
Sep 21 Javascript
JavaScript插件化开发教程 (四)
Jan 27 Javascript
JavaScript Function函数类型介绍
Apr 08 Javascript
AngularJS ng-bind-template 指令详解
Jul 30 Javascript
jquery中用jsonp实现搜索框功能
Oct 18 Javascript
JS实现给对象动态添加属性的方法
Jan 05 Javascript
解决React Native端口号修改的方法
Jul 28 Javascript
angularJS开发注意事项
May 26 Javascript
vue分页插件的使用方法
Dec 25 Javascript
详解Vue Cli浏览器兼容性实践
Jun 08 Javascript
js前端对于大量数据的展示方式及处理方法
Dec 02 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
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP实现简易blog的制作
2016/10/24 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
Python常见数据结构详解
2014/07/24 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
python调用接口的4种方式代码实例
2019/11/19 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
公司年会演讲稿范文
2014/01/11 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
团队激励口号
2014/06/06 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
五好家庭事迹材料
2014/12/20 职场文书
教师个人教学总结
2015/02/11 职场文书
入学证明
2015/06/23 职场文书