js中使用数组这个数据结构,就是直接调用API,不需要自己封装
不需要封装的原因
- 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构
- js的数组不像c语言那种底层代码一样,只能存储除了定义时的数据类型,也不会定义多长就是多长而无法自己增加
数组的劣势
- 在中间位置插入、删除元素的效率比较低,因为要移动元素
- 数组扩大,有的语言需要重新申请更大的存储空间,将原来的值全部赋值过来后,移除原来的数组
创建数组
注意
new Array(7)和new Array('7')生成的数组不一样,es6为了避免这个情况出现,所以增加了Array.of()
new Array(7)结果为: [empty X 7]
new Array('7')结果为: ['7'] ,Array.of 同这个
数组方法 -- 返回值
js的数组提供了很多方法:
注意
forEach 不主动改变原数组,但是你在给定的函数中修改了原数组那就会修改!
更多
pop(删除数组的最后一个元素)-- 返回移除的项,会修改原始数组。注意:数组为空的则返回underfined
push(将一个或多个元素添加到数组的末尾)-- 会修改原始数组,并返回修改后的数组的长度
shift(删除数组的第一个元素)-- 会修改原始数组,返回移除的项。注意:数组为空的则返回underfined
unshift(在数组的开头添加一个或多个元素)-- 会修改原始数组,并返回修改后的数组的长度
splice(用于从数组中添加或删除元素)-- 同时返回被删除的元素(只插入元素时返回一个空数组 []),会修改原始数组。
reduce(用于对数组的所有元素执行一个提供的回调函数,将数组元素归纳为单个值)-- 返回值是最后一次调用回调函数后的累积值,可以提供初始值,eg:enums.reduce((acc //累加器, { label, value }) => {return {xxxx}, {} //初始值) ,不修改原数组。
filter(遍历数组,过滤符合条件的数组元素(为true) )-- 返回合条件的新数组,不修改原数组
find(找到第一个符合条件的成员)-- 返回数组成员,不改变原数组
findIndex(找到第一个符合成员的索引)-- 返回索引值, 不改变原数组
这里菜鸟几乎列举了所有常用的方法,其他菜鸟就不多说了,可以直接看:
数组方法注意
一、toString和valueOf的区别
toString() 和 valueOf() 都是对象的方法。toString() 方法返回反映这个对象的字符串。valueOf() 方法如果存在任意原始值,它就默认将对象转换为表示它的原始值;对象是复合值,而大多数对象无法真正表示为一个原始值,因此默认的 valueOf() 方法简单地返回对象本身,而不是返回一个原始值。
这里可以见我的博客:看完再也不用担心面试官问你类型转换了!
-
toString() 和valueOf() 的主要不同点在于,toString() 返回的是字符串,而 valueOf() 返回的是原对象
-
由于 undefined 和 null 不是对象,所以它们 toString() 和 valueOf() 两个方法都没有
-
数值 Number 类型的 toString() 方法可以接收转换基数,返回不同进制的字符串形式的数值;而valueOf()方法无法接受转换基数
-
时间 Date 类型的 toString() 方法返回的表示时间的字符串表示;而 valueOf() 方法返回的是现在到1970年1月1日00:00:00的数值类型的毫秒数
-
包装对象的 valueOf() 方法返回该包装对象对应的原始值
-
使用 toString() 方法可以区分内置函数和自定义函数
感谢作者:隔壁大米,文章链接:www.jianshu.com/p/24547d4e5…
二、push | unshift
这些方法都可以接收多个参数,一次性添加或删除多个元素!