微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

深入探密Javascript数组方法

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

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

代码如下:

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

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

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

代码如下:

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

代码如下:

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

代码如下:

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

代码如下:

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

代码如下:
.sort(); // 返回结果:["1","10","12","2"]

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

代码如下:
.sort(function(a,b) { return a - b; }) // 返回结果:["1","2","12"]

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

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

代码如下:

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

代码如下:

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

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

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

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

原文地址:https://www.jb51.cc/js/56437.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐