关于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遍历Form示例代码
Sep 03 Javascript
jquery为页面增加快捷键示例
Jan 31 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
Dec 10 Javascript
javascript随机抽取0-100之间不重复的10个数
Feb 25 Javascript
js闭包引起的事件注册问题介绍
Mar 29 Javascript
JS实现环形进度条(从0到100%)效果
Jul 05 Javascript
bootstrap下拉列表与输入框组结合的样式调整
Oct 08 Javascript
利用require.js与angular搭建spa应用的方法实例
Jul 19 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
如何在Vue中抽离接口配置文件
Oct 31 Javascript
vue组件创建的三种方式小结
Feb 03 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
php巧获服务器端信息
2006/12/06 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
Python 正则表达式的高级用法
2016/12/04 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
如何编写python的daemon程序
2021/01/07 Python
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
中文专业求职信
2014/06/20 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
2014年新教师工作总结
2014/11/08 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL