日常开发过程中,发现自己对很多原生方法都不知道,有些早已实现的方法,却傻乎乎自己去实现,因此萌生了总结和练习JS内置对象方法的想法。
以下内容可能并不有趣,请谨慎观看?,参考自MDN
Array对象的属性
Array.length
这个大家都再熟悉不过啦,表示数组长度~Array.prototype
数组对象的原型~
Array对象的内置方法
-
Array.prototype.copyWithin(target,start,end)
该方法解释起来似乎不太好描述,简单来说,copyWithin用于把从目标数组Array拷贝一部分出来,并把这一 部分放入target
指向的位置(target,start,end
都为整数),而且不会改变数组长度!!!也就是说,如果拷贝的那部分放入新数组时,如果长度超出原数组长度,那么多余长度的那部分会被忽略,不会继续加入到新数组中
。
示例代码:代码中有一段注释,也是比较关键的一点,该函数做的操作是把拷贝出来的数据替换掉target所指位置的原来的元素,注意,
是替换
,原来target所在位置的元素在新数组中不再存在!! -
Array.prototype.concat()
该方法用于连接多个数组或者非数组值,并且返回一个新数组。
具体看示例:该方法的参数有一点需要解释,传入的多个参数中,如果是数组类型,则将它的元素复制一份并push到新数组中,若是其他类型,则直接当作元素push到新数组中。
重点:concat的运算过程是重新复制一份内容传入新数组,因此新数组和旧数组的内存地址是不同的,对新数组做的改变并不会影响到原来的数组,但是!注意这个但是!我说三遍但是!这条原则是基于所有数组元素都是基本类型,如果说某一个元素是引用类型,那么concat所复制的也只不过是这个引用类型的一个引用,指向的是同一个内存地址!总结:新数组的内存地址和旧数组不一样,但是新数组内引用类型元素和旧数组内相对的那个引用类型元素是指向同一内存地址!
,PS:最后,假如你的参数和旧数组都不含有引用类型,你可以使用concat
来进行数组深度拷贝~ -
Array.of(element0[, element1[, ...[, elementN]]])
该方法用于创建一个新的Array
实例,传入的参数将依次成为新数组的元素。该方法和数组的构造函数区别在于,Array(5)
返回[,,,,],而Array.of(5)
返回[5]请看示例代码: Array.isArray(obj)
不多说了,判断输入的参数obj是否是数组类型,如果是,返回true
,否则返回false
-
Array.from(arrayLike[, mapFn[, thisArg]])
该方法为ES2015
新增的方法,返回一个新的数组对象,其参数有三个:第一个参数
为数组类型或者类数组类型的对象,是必选参数,`arraylike`,顾名思义,要与数组结构类似。一般来说,有以下几种情况:一个满足以`数字为键,并且拥有length属性的对象`,es6新增的数据结构`set` 和 `map`,当然别忘了`字符串对象`~,它当然也是`arraylike`~
第二个参数
可选参数,一旦你指定了该参数,你的数据会经过该函数处理后再返回
第三个参数
可选参数,指定from方法运行时的this环境
上代码~~
细心的你,可能还发现,新的数组去重了呢?!是咋回事呢?这和Array.from
可没有关系噢,请移步 ES6 Set数据结构~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。