关于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通过Ajax方式来提交Form表单的具体实现
Nov 07 Javascript
Eclipse去除js(JavaScript)验证错误
Feb 11 Javascript
JavaScript中的console.trace()函数介绍
Dec 29 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
Javascript 判断两个IP是否在同一网段实例代码
Nov 28 Javascript
js自定义QQ菜单效果
Jan 10 Javascript
JavaScript中错误正确处理方式小结你用对了吗
Oct 10 Javascript
javascript浏览器用户代理检测脚本实现方法
Oct 27 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 Javascript
原生js拖拽实现图形伸缩效果
Feb 10 Javascript
浅谈Vue 函数式组件的使用技巧
Jun 16 Javascript
uniapp开发小程序的经验总结
Apr 08 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 常用类整理
2009/12/23 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python的几种主动结束程序方式
2019/11/22 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
仓管员岗位职责范文
2013/11/08 职场文书
人事专员的岗位职责
2014/03/01 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
新年祝酒词大全
2015/08/11 职场文书
心得体会格式及范文
2016/01/25 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
Vue详细的入门笔记
2021/05/10 Vue.js
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle