博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS数组追加数组采用push.apply的坑
阅读量:6942 次
发布时间:2019-06-27

本文共 892 字,大约阅读时间需要 2 分钟。

JS数组追加数组没有现成的函数,这么多年我已经习惯了a.push.apply(a, b);这种自以为很酷的,不需要写for循环的写法,一直也没遇到什么问题,直到今天我要append的b是个很大的数组时才遇到了坑。

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);小一个元素居然就好了,测试了一下其他浏览器也都有大数组才出错的问题,但不同浏览器临界值还各异。

搜索了 发现也有人遇到这样的坑:

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也是最快的

这个小坑给了我两点思考:

1、有些花哨的用法如a.push.apply(a, b);还是用于面试题装逼就行,实战上还是多走老实路线免得遇到异常和性能的坑,例如小数量的如的这个几十个节点的3D网络拓扑弹簧布局玩玩倒是没问题,遇到真正大数据量如中的HT for Web的这个3D大数据量性能才能考验出问题。

2、 从stackoverflow找答案时不要仅盯着投票最多的,真理往往掌握在少数人手中,下图259票的回答是个坑,34票的才是最完美的分析:

 

转载于:https://www.cnblogs.com/xhload3d/p/3777231.html

你可能感兴趣的文章
[php]php设计模式 Composite (组合模式)
查看>>
SQL Server之事务基础知识
查看>>
win7 x64 下VC6的调试程序无法退出的问题
查看>>
VBA之四----给程序自动加行号
查看>>
Windows 下 Nginx + PHP5 的安装与配置
查看>>
在WCF服务中获取客户端的IP地址和端口号
查看>>
【技术贴】所有好友的QQ空间都打不开进不去的超简单解决办法!
查看>>
这种写法用过没:string.Format("{0,-10}", 8)
查看>>
Google Map Logs
查看>>
有关在SharePoint Server中Infopath表单无法呈现的问题及解决方案
查看>>
HDU-1572 下沙小面的(2) DFS
查看>>
Silverlight3.0正式版(Silverlight3_Tools)离线安装
查看>>
[转]23种经典设计模式的java实现_5_职责链模式
查看>>
PL/SQL Developer 9.0.1.1613+注册机
查看>>
微博营销,究竟该怎么做?(实战系列四:活动篇)
查看>>
Firebug中的console tab使用总结
查看>>
java 内部类深度剖析
查看>>
爱♥曲线,单身程序猿福音
查看>>
SEO互帮团真诚奉献:一百多个站长论坛!
查看>>
Zend Studio 9.01汉化破解(图)
查看>>