记录一下经常忘的数组方法,栈和队列
栈:LIFO即后进先出,类似个容器柜子,后面放的东西最先拿出来
最新添加的项最早被移除
栈中项的插入(推入)和移除(推出)只发生在栈顶
数组的方法:push()和pop()就类似于与栈行为
push():推入/新增,添加到数组尾部,返回修改后的数组长度
pop():推出/删除,移除数组尾部最后一项,返回一处的项
队列:FIFO即先进先出,就像排队上厕所,谁先来的谁先出
在末端添加项,在前端移除项,push()已经实现在末端添加项,所以只需要新增个再数组前端移除项的方法---即shift()
shift(): 移除数组中的第一项,返回移除项,并将数组长度减1
unshift():在数组前端添加项,返回新数组长度
数组的其他方法:
sort(): 按升序排列数组
reverse(): 反转数组
concat(): 合并数组
slice(): 数组切片,接收2个参数,即返回项的起始位置和结束位置之前的项,但不包含结束位置,不会影响原数组
splice():向数组中部插入/删除数据
indexOf():
lastIndexOf():
迭代(遍历)方法:
记录一下关于ES6扩展运算符克隆数组时,
当数组只有一层是,可以用扩展运算符进行完全深拷贝。
但当对象有多层时:
扩展运算符并不能打散第二层对象的值,且无法对其进行深拷贝,拷贝前和拷贝后第二层对象的引用地址仍然是同一个,一方改变,另一方也改变。
结论:用扩展运算符对数组或者对象进行拷贝时,只能扩展和深拷贝第一层的值,对于第二层极其以后的值,扩展运算符将不能对其进行打散扩展,也不能对其进行深拷贝,即拷贝后和拷贝前第二层中的对象或者数组仍然引用的是同一个地址,其中一方改变,另一方也跟着改变。