1

前言

很多人在学习原生JS的过程中会遇到一些疑惑,比如在学习array时,就很容易搞不清哪些方法会改变原来数组,哪些方法不会改变原来数组?再比如很多人会使用new Date()获取时间,却搞不清楚1970年是什么鬼。这篇文章就是针对诸如此类问题的总结。如果你有这方面的疑惑,千万不要错过这篇文章哦~

正文

一:数组

1.JS 数组特点(重点知识)
(1)数组元素可以是任意类型的,并且同一个数组的不同元素也可能是不同的类型

(2)数组是动态的:根据需要它们会增长或者缩减,并且在创建时无需声明一个固定大小或者在数组大小变化时无需重新分配空间

(3)数组元素的索引不一定要连续的,它们之间可以有空缺。如果省略数组直接量中的某个值,省略的元素在数组中是存在的,省略的元素将被赋予undefined值

(4)JS数组就是JS对象的特殊形式,数组索引实际上和碰巧是整数的属性名差不多。JS将指定的数字索引值转换成字符串——索引值1变成“1”,然后将其作为属性名来用。所有的数组都是对象,可以为其创建任意名字的属性。但是如果使用的属性是数组的索引,数组的特殊行为就是根据需要更新它们的length属性值。

注意事项
1)区分数组的索引和对象的属性名
所有的索引都是属性名,但只有0——2^32-2的整数属性名才是索引。
2)稀疏数组
稀疏数组就是包含从0开始的不连续索引的数组。如果数组是稀疏的,length属性值大于元素的个数。
3)数组长度
如果为一个数组元素赋值,它的索引i大于或者等于现有数组的长度时,length的属性将设置为i+1
设置length属性为一个小于当前长度的非负整数n时,当前数组中那些索引值大于或等于n的元素将从中删除
4)delete
delete可以用来删除一个数组元素,这类似于隐式给数组元素赋值undefined,不会修改数组的length属性

2.数组方法
不改变原数组:join(有返回)concat(有返回) sort(有返回) toString(有返回)
改变原数组的:reverse sort(有返回) splice(有返回)pop push shift unshift

(1)join
将数组中的所有元素转化为字符串并连接在一起,返回最后生成的字符串。
(2)reverse
将数组中的元素颠倒顺序,返回逆序数组。它不通过重新排列的元素来创建新的数组,而是在原来的数组中重新排列了它们。
(3)sort
将数组中的元素排序后并返回排序后的数组。如果数组中包含undefined,它们会被排到数组的尾部。
(4)concat
创建并返回一个新数组,它的元素包含调用concat()的原来数组的元素和concat()的每个参数。
(5)slice
该方法返回指定数组的一个片段或子数组。
(6)splice
在数组中插入或者删除元素的通用方法。splice()会修改调用的数组。splice()返回一个由删除元素组成的数组。
(7)push() pop() shift() unshift()都会改变数组
(8)toString() toLocalString()
toString()方法将每个元素转换为字符串,并且输出用逗号分隔的字符串列表。注意输出不包括方括号或其他形式的包裹数组值的分隔符

3.ECMAScript中新的数组方法
改变原来数组的只有:forEach(无返回)

(1)forEach
该方法从头到尾遍历数组,为每个元素调用指定的函数。
(2)map
该方法将调用的数组的每个元素传递给指定的函数,并且返回一个数组,它包含该函数的返回值。map返回的是新数组:它不修改调用的数组。
(3)filter
该方法返回的数组元素是调用的数组的一个子集。传递的函数是来逻辑判断的:该函数返回true或false。如果返回值为true或者能够转换为true的值,它将被加到一个作为返回值的数组中。
(4)every和some
every方法当且仅当针对数组中的所有元素调用判定函数都返回true时,才返回true.
some方法当数组中至少有一个元素调用判定函数返回true,它就返回true.并且当且仅当数值中的所有元素调用判定函数都返回false,它才返回false
(5)reduce和reduceRight
reduce和reduceRight方法使用指定的函数将数组元素进行组合,生成单个值。reduce需要两个参数:一个是执行简化的函数,另一个是传递给函数的初始值。reduce使用的函数有四个参数:初始值/积累值、数组元素、元素索引、数组本身。
(6)indexOf()和lastIndexOf()
indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1.indexOf从头至尾搜索,而lastIndexOf则反向搜索。

总结:
能改变原来数组的有:

sort() reverse() splice() forEach() pop push shift unshift

附:关于数组与类数组的区别,请参考这里:JS类数组

二:Date

详情参考:https://segmentfault.com/a/11...


specialcoder
2.2k 声望170 粉丝

前端 设计 摄影 文学


« 上一篇
二分查找