深入探密Javascript数组方法

前端之家收集整理的这篇文章主要介绍了深入探密Javascript数组方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法。数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'。

1. Array.prototype.slice方法 数组的 slice 方法通常用来从一个数组中抽取片断。不过,它还有将“类数组”(比如arguments和​HTMLCollection​)转换为真正数组的本领。

代码如下:@H_404_6@
404_6@

我就好奇了为什么数组的slice方法有这样的本领,它在javascript引擎中是如何实现的?slice的兄弟方法有没有这样的本领?

带着好奇心,下载Google的V8 javascript引擎源码到本地,V8源码的下载地址:

在v8-master/src/array.js中查找“Array.prototype.slice”:

代码如下:@H_404_6@
404_6@

接着猜想调用“类数组”走的应该是SimpleSlice方法,然后在源码查找“SimpleSlice“,发现Array.prototype.splice源码中也调用了SimpleSlice方法,且结果变量也初始化为空数组。不过,想用splice方法把“类数组”转化为真正数组,必须要传入起始位置参数为0,即:

代码如下:@H_404_6@
404_6@

因为它的实现原理就是将被删除的数组项组成新数组。感兴趣的童鞋可以看下Array.prototype.splice的源码实现。 此外,slice还可以克隆一个数组:

代码如下:@H_404_6@
404_6@

2. Array.prototype.push 方法 使用 push方法可以合并数组:

代码如下:@H_404_6@
404_6@

3. Array.prototype.sort 方法 先上代码

代码如下:@H_404_6@
404_6@

上面的结果通常不是我们想要的,那么如何按数值大小排序:

代码如下:@H_404_6@
404_6@

有了排序比较器函数之后,就可以自定义很多比较器,从而实现个性化的排序。

4. length 属性 数组的length属性,不是只读的,也就说还可写哦,比如使用length属性去截断数组:

代码如下:@H_404_6@
404_6@

与此同时,如果把length属性变大,数组的长度值变会增加,且使用undefined来作为新的元素填充。

代码如下:@H_404_6@
404_6@

好了,今天就总结到这里了,已经凌晨了,以后有什么新发现再append到这里。 之前,没有写博客的习惯,只习惯把平时的总结放到有道云笔记中,没想到把观点写出来着实要花点心思的,因为要考虑如何表达,才能让别人更好地理解。

有什么表达不对或理解错误的地方,还望大家帮忙指正出来。

另附上一些常用的javascript数组方法

concat()连接两个或更多的数组,并返回结果。 join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 pop()删除并返回数组的最后一个元素 push()向数组的末尾添加一个或更多元素,并返回新的长度。 reverse()颠倒数组中元素的顺序。 shift()删除并返回数组的第一个元素 slice()从某个已有的数组返回选定的元素 sort()对数组的元素进行排序 splice()删除元素,并向数组添加新元素。 toSource()返回该对象的源代码 toString()把数组转换为字符串,并返回结果。 toLocaleString()把数组转换为本地数组,并返回结果。 unshift()向数组的开头添加一个或更多元素,并返回新的长度。 valueOf()返回数组对象的原始值

原文链接:https://www.f2er.com/js/56437.html

猜你在找的JavaScript相关文章