a.push.apply(a, b) 方式实现数组拼接的apply越界问题
2017-12-18 00:00
225 查看
先描述一下出现问题的场景
在使用jquery DataTables 1.10.5表格插件的时候出现了下图问题
数据量小的时候并没有出现此问题,在数据超过几万的时候才出现这个栈溢出。
在对比了DataTables 1.10.16 新版本的相关位置代码之后定位到了问题
这句代码使用了push.apply的方式实现数组的拼接
stackoverflow上的大神给出的解释很好,我就直接引用了
(https://stackoverflow.com/questions/1374126/how-to-extend-an-existing-javascript-array-with-another-array-without-creating/17368101#17368101)
就是说是因为apply这个传参数量越界了,导致了这个栈溢出问题,并且mdn上有相关解释
然后我去翻了mdn,找到了相关解析如下图
DataTables 1.10.16新版本没有再用apply的方法,使用的是$.merge这个jquery方法,底层的实现就是遍历第二个数组然后一个一个的添加到第一个数组里面去,就没有这个问题了。
在使用jquery DataTables 1.10.5表格插件的时候出现了下图问题
数据量小的时候并没有出现此问题,在数据超过几万的时候才出现这个栈溢出。
在对比了DataTables 1.10.16 新版本的相关位置代码之后定位到了问题
这句代码使用了push.apply的方式实现数组的拼接
stackoverflow上的大神给出的解释很好,我就直接引用了
(https://stackoverflow.com/questions/1374126/how-to-extend-an-existing-javascript-array-with-another-array-without-creating/17368101#17368101)
就是说是因为apply这个传参数量越界了,导致了这个栈溢出问题,并且mdn上有相关解释
然后我去翻了mdn,找到了相关解析如下图
DataTables 1.10.16新版本没有再用apply的方法,使用的是$.merge这个jquery方法,底层的实现就是遍历第二个数组然后一个一个的添加到第一个数组里面去,就没有这个问题了。
相关文章推荐
- Array.prototype.push结合apply 实现 object 伪装数组
- 关于JS数组追加数组采用push.apply的问题
- 最大子数组问题(三种方式,java实现)
- 关于JS数组追加数组采用push.apply的问题
- 约瑟夫环问题的 PHP 实现--使用 PHP 数组内部指针操作函数
- 关于Session的机制,实现方式和安全、单点故障问题
- js,java实现escape()和unescape()函数解决以给方式提交中中文参数问题
- javascript数组唯一化实现方式
- 报数问题 (数组实现)
- 数组实现的约瑟夫问题(Java)
- QP实现之函数指针数组无法获取正确地址的问题
- javascript数组唯一化实现方式
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- linq 实现查询字符串拼接 : And 和 OR 两种方式
- 今日遇到的javascript问题解决-数组越界和jquery取iframe的问题。
- 一个关于去除数组重复元素的问题(C语言实现)
- 在DataTable中实现DataTable.Select("Distinct")功能/数组的方式实现DataTable中的distinct
- 在一个数组中实现三个栈,并且数组未满之前栈不能溢出的问题
- 在绑定DataGrid控件,做添加删除时遇到问题(数组越界)
- 用数组的方法解决大数、巨数的阶乘结果越界的问题