在JavaScript中删除数组元素的两种方法的区别- delete VS splice

coding2live 2021-01-22 17:12:50 91

delete方法删除数组元素与使用splice删除数组元素之间有什么区别?

例如下面的例子:

myArray = ['a', 'b', 'c', 'd'];

delete myArray[1];
//  or
myArray.splice (1, 1);

既然我能像删除对象那样删除数组元素,那splice方法存在的意义是什么呢?

以下答案仅供参考

delete虽然可以删除对象的属性。

但是把它应用到数组的时候,它并不会重新索引数组的index或更新其长度。

看起来就像是把这个删掉的元素置为了undefined:

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> delete myArray[0]
  true
> myArray[0]
  undefined

需要注意的是:delete方法实际上并没有把元素的值设置成undefined,而是把它从数组中移除了,看起来像是变成了undefined

把这段代码复制到谷歌浏览器的dev tools中,在被删除的元素的位置会出现empty

> myArray[0]
  undefined
> myArray
  [empty, "b", "c", "d"]

myArray.splice(start, deleteCount)实际上删除了元素,重新索引了数组的下标,并改变了它的长度。

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> myArray.splice(0, 2)
  ["a", "b"]
> myArray
  ["c", "d"]