很多高手的JavaScript代码里都有array.slice(0),这语句有什么用

简介: 很多高手的JavaScript代码里都有array.slice(0),这语句有什么用

这个stackoverflow链接里有详细讨论。

https://stackoverflow.com/questions/5024085/whats-the-point-of-slice0-hereimage.png其他热心网友的解释是:对数组施加sort操作,会修改调用sort的数据内元素的原始位置。因此为了保证不对sort方法调用的原数组产生副作用(side effect),我们使用slice(0)对原始数组进行一个深拷贝:


slice() always returns a new array - the array returned by slice(0) is identical to the input, which basically means it’s a cheap way to duplicate an array.


slice另一种很有用的做法是将类数组对象转化为真正的数组对象。所谓类数组对象,一个例子就是API document.getElementsByTagName返回的结果NodeList的类型:虽然不是真正的数组,但是有length属性,支持用JavaScript按照索引访问每个元素。

使用var anchorArray = [].slice.call(document.getElementsByTagName(‘a’), 0)这种乾坤大挪移的办法,借用了[]这个原生数组提供的slice方法,可以轻松把NodeList转换成真正的JavaScript数组。


It’s also used to convert array-like objects into arrays. For example, a DOM NodeList (returned by several DOM methods like getElementsByTagName) is not an array, but it is an array-like object with a length field and is indexable in JavaScript. To convert it to an array, one often uses:

image.png

相关文章
|
17天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
1月前
|
存储 JavaScript 前端开发
非常实用的JavaScript一行代码(整理总结)
非常实用的JavaScript一行代码(整理总结)
30 0
|
1月前
|
JavaScript 前端开发 测试技术
如何编写JavaScript模块化代码
如何编写JavaScript模块化代码
12 0
|
1月前
|
机器学习/深度学习 前端开发 JavaScript
实用的javascript代码分享
32个史上最有用的js代码
28 1
|
2月前
|
JavaScript 前端开发 算法
Node.js 艺术:用代码打印出绚丽多彩的控制台柱状图
Node.js 艺术:用代码打印出绚丽多彩的控制台柱状图
41 0
|
24天前
|
JavaScript 前端开发
JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
23 1
|
1月前
|
JSON 前端开发 JavaScript
16个重要的JavaScript代码
16个重要的JavaScript代码
32 1
|
1月前
|
JavaScript
当当网新用户注册界面——JS代码
当当网新用户注册界面——JS代码
7 0
|
1月前
|
JavaScript
当当网首页——JS代码
当当网首页——JS代码
11 1
|
1月前
|
JavaScript Java
什么?java中居然可以执行js代码了?真是不知者不怪
什么?java中居然可以执行js代码了?真是不知者不怪
13 1