关于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 相关文章推荐
div移动 输入框不能输入的问题
Nov 19 Javascript
jquery 页面全选框实践代码
Apr 02 Javascript
Jquery插件写法笔记整理
Sep 06 Javascript
jquery获取radio值(单选组radio)
Oct 16 Javascript
jQuery使用之标记元素属性用法实例
Jan 19 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
在Python中使用glob模块查找文件路径的方法
Jun 17 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
Sep 04 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
使用FileReader API创建Vue文件阅读器组件
Apr 03 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
Oct 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
默默简单的写了一个模板引擎
2007/01/02 PHP
php数组查找函数总结
2014/11/18 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
python关闭windows进程的方法
2015/04/18 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
如何利用cmp命令比较文件
2013/09/23 面试题
土木建筑学生自我评价
2014/01/14 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis