当前位置: 首页 > Web前端 > JavaScript

深入理解JavaScript——数组

时间:2023-03-27 01:21:29 JavaScript

上一个系列,我们从内置构造函数Object入手,从中推导出各种知识点。接着又讲了另一个大构造函数Function,也带出了堪比Object的知识点。经过这两个,笔者认为JavaScript的构建已经完成,但是天上还有两朵小乌云。今天我们就来说说其中的一个——数组总结数组是一组按顺序排列的值。创建数组的目的通常是迭代数字索引值,从零索引开始。我们需要了解的是,数组是按照数字顺序排列的集合,相对而言,对象的属性名是无序的。本质上,数组使用数字作为查找键,而对象具有用户定义的属性名称。JavaScript没有真正的关联数组,可以使用对象来实现关联数组的功能。如果我们想知道数组中有哪些方法和属性,有一个很简单的方法——通过浏览器打印Arrayconsole.dir(Array);去掉arguments、caller、Symbol、getSymbol和[[Scopes]],剩下的就是我们非常熟悉的数组拥有的静态函数。可以看到里面有length、name等静态属性,还有from、isArray、of等静态方法下面我们用Class来写Array的伪代码:classMyArray{constructor(){this.name=name;this.length=arguments.length;//arguments是指参数中的类数组对象this.prototype=prototype;}}MyArray.from=function(){};MyArray.isArray=function(){};MyArray.of=function(){};ps:这里提一下,用Class来模拟一个类(继承),它的构造函数其实很容易记住,是用来进行属性初始化的。这是非常特别的。它写在类中,而不是写在原型的属性和方法中。上面已经展示了Array的静态属性和方法,但是我们知道JavaScript是一门基于原型作为继承的语言,也就是说在“prototype”属性中,有我们平时使用的数组方法。我们展开原型看实例属性indexlength实例方法pop():从数组中删除最后一个元素,并返回这个原语的值。此方法改变数组的长度push():在数组末尾添加一个或多个元素并返回数组的新长度reverse():反转数组中的原始位置并返回数组。数组的第一个元素成为最后一个元素,数组的最后一个元素成为第一个元素。这个方法会改变原来的数组,所以一般如果要反转一个数组,先深拷贝再shift():删除数组的第一个元素,返回元素的值。此方法更改数组的长度sort():使用就地算法对数组的元素进行排序并返回数组。默认排序是在将元素转换为字符串然后比较它们的UTF-16代码单元序列时构造的由于它是依赖于实现的,因此无法保证排序的时间和空间复杂度splice():方法通过删除或替换通过添加现有元素或原地添加新元素来修改数组,并将修改后的内容作为数组返回。该方法会改变原数组的第一个参数,指定修改的起始位置(从0开始计数)unshift():向数组开头添加一个或多个元素,并返回数组的新长度methodmodifiestheoriginalarray)concat():该方法用于组合或多个数组。该方法不改变现有的数组,而是返回一个新的数字如果数组只有一项,则不带分隔符返回该项slice():该方法返回一个新的数组对象,它是由begin和end(包括begin,不包括end)确定的原始数组的浅拷贝。原数组不会被改变在数组元素中filter():通过回调函数过滤元素find():返回数组中第一个满足提供的测试函数的元素的值some():测试数组中是否至少有一个元素通过提供的functionTestthatitreturnsavalueofbooleanreduce():为数组中的每个元素执行一个你提供的reducer函数。每次reducer运行时,都会将前一个元素的计算结果作为参数传入,最后将结果聚合成一个单一的返回值哪些API是纯函数哪些API会改变原数组arr.splice();arr.sort();arr.reverse();arr.fill();arr.push();arr.pop();arr.shift();arr.unshift();哪些API不会变原始数组,即纯函数arr.slice();arr.concat();arr.map();arr.forEach();arr.fliter();arr.reduce();arr.every();arr.some();arr.find();arr.entries();参考超级详细的js数组方法详解MDN系列文章供in-深入理解JavaScript——文章开头深入理解JavaScript——什么是JavaScript深入理解JavaScript——JavaScript由什么组成深入理解JavaScript——一切都是对象深入理解ofJavaScript——Object(对象)深入理解JavaScript——new是做什么的深入理解JavaScript——Object.create深入理解JavaScript——复制的秘密深入理解JavaScript————原型深入理解JavaScript——继承深入理解JavaScript——JavaScript中的始皇帝深入理解JavaScript——instanceof——寻祖深入理解JavaScript——函数深入理解理解JavaScript-深入理解JavaSc的范围ript——深入理解JavaScript的this关键字——call、apply、bin第三总将深入理解JavaScript——ImmediatelyExecutedFunction(IIFE)深入理解JavaScript——词法环境深入理解JavaScript——执行上下文和调用栈深入理解JavaScript——作用域VS执行深入理解JavaScript上下文——深入理解闭包JavaScript——防抖与节流深入理解JavaScript——函数式编程深入理解JavaScript——垃圾回收机制深入理解JavaScript———Arrays深入理解JavaScript—Loopscomehere深入理解JavaScript—String