关于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 相关文章推荐
input按钮的事件处理大全
Dec 10 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
浅谈JavaScript之事件绑定
Jul 08 Javascript
jquery处理json对象
Nov 03 Javascript
javascript编写实用的省市选择器
Feb 12 Javascript
Jquery实现鼠标移动放大图片功能实例
Mar 25 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
JavaScript字符串对象(string)基本用法示例
Jan 18 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
JavaScript运动框架 多值运动(四)
May 18 Javascript
Vue-Router的使用方法
Sep 05 Javascript
实用的Vue开发技巧
May 30 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
一个简洁的多级别论坛
2006/10/09 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
多引号嵌套的变量命名的问题
2014/05/09 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
js运动应用实例解析
2015/12/28 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
2016/08/16 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
用Python编写一个国际象棋AI程序
2014/11/28 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
活动志愿者自荐信
2014/01/27 职场文书
颁奖晚会主持词
2014/03/25 职场文书
2014年小学工作总结
2014/11/26 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL