源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

深入探密Javascript数组方法

  • 时间:2022-08-03 01:42 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:深入探密Javascript数组方法
在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法。数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'。 1. Array.prototype.slice方法 数组的 slice 方法通常用来从一个数组中抽取片断。不过,它还有将“类数组”(比如arguments和​HTMLCollection​)转换为真正数组的本领。
[url=https://github.com/v8/v8]https://github.com/v8/v8[/url]。 在v8-master/src/array.js中查找“Array.prototype.slice”:
[u]复制代码[/u] 代码如下:
function ArraySlice(start, end) {   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.slice");   ...   var result = []; // 这句是关键   if (end_i < start_i) return result;   if (UseSparseVariant(array, len, IS_ARRAY(array), end_i - start_i)) {      ...     SparseSlice(array, start_i, end_i - start_i, len, result);   } else {     SimpleSlice(array, start_i, end_i - start_i, len, result);   }   ...   return result;
接着猜想调用“类数组”走的应该是SimpleSlice方法,然后在源码查找“SimpleSlice“,发现Array.prototype.splice源码中也调用了SimpleSlice方法,且结果变量也初始化为空数组。不过,想用splice方法把“类数组”转化为真正数组,必须要传入起始位置参数为0,即:
[u]复制代码[/u] 代码如下:
 var nodesArr = Array.prototype.splice.call(document.forms, 0);
因为它的实现原理就是将被删除的数组项组成新数组。感兴趣的童鞋可以看下Array.prototype.splice的源码实现。 此外,slice还可以克隆一个数组:
[u]复制代码[/u] 代码如下:
 var arr = [1, 2, 3];  var cloneArr = arr.slice(); // cloneArr:  [1, 2, 3]
2. Array.prototype.push 方法 使用 push方法可以合并数组:
[u]复制代码[/u] 代码如下:
 var arr1 = [1, 'str', {name: 'lang'}];  var arr2 = [2, 'ing'];  Array.prototype.push.apply(arr1, arr2);  // 返回结果:[1, "str", {name: 'lang'}, 2, "ing"]
3. Array.prototype.sort 方法 先上代码:
[u]复制代码[/u] 代码如下:
var arr = ['1', '2', '10', '12']; arr.sort(); // 返回结果:["1", "10", "12", "2"]
上面的结果通常不是我们想要的,那么如何按数值大小排序:
[u]复制代码[/u] 代码如下:
arr.sort(function(a, b) {   return a - b; }) // 返回结果:["1", "2", "10", "12"]
有了排序比较器函数之后,就可以自定义很多比较器,从而实现个性化的排序。 4. length 属性 数组的length属性,不是只读的,也就说还可写哦,比如使用length属性去截断数组:
[u]复制代码[/u] 代码如下:
 var arr = [1, 2, 3, 4];  arr.length = 2;  // arr: [1, 2]  arr.length = 0;  // arr: []
与此同时,如果把length属性变大,数组的长度值变会增加,且使用undefined来作为新的元素填充。
[u]复制代码[/u] 代码如下:
 var arr = [];  arr.length = 3;  // arr: [undefined, undefined, undefined]
好了,今天就总结到这里了,已经凌晨了,以后有什么新发现再append到这里。 之前,没有写博客的习惯,只习惯把平时的总结放到有道云笔记中,没想到把观点写出来着实要花点心思的,因为要考虑如何表达,才能让别人更好地理解。 有什么表达不对或理解错误的地方,还望大家帮忙指正出来。 另附上一些常用的javascript数组方法 concat()连接两个或更多的数组,并返回结果。 join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 pop()删除并返回数组的最后一个元素 push()向数组的末尾添加一个或更多元素,并返回新的长度。 reverse()颠倒数组中元素的顺序。 shift()删除并返回数组的第一个元素 slice()从某个已有的数组返回选定的元素 sort()对数组的元素进行排序 splice()删除元素,并向数组添加新元素。 toSource()返回该对象的源代码 toString()把数组转换为字符串,并返回结果。 toLocaleString()把数组转换为本地数组,并返回结果。 unshift()向数组的开头添加一个或更多元素,并返回新的长度。 valueOf()返回数组对象的原始值
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部