LinDaiDai/niubility-coding-js

🌶️第3期第1题:使用delete删除数组元素,其长度会改变吗?

Opened this issue · 0 comments

使用delete删除数组元素,其长度会改变吗?

(题目来源:haizlin/fe-interview#2462)

咱来写个案例🌰看看就知道了:

var arr = [1, 2, 3]
delete arr[1]
console.log(arr)
console.log(arr.length)

结果如下:

通过结果,我们可以得出结论:使用delete删除数组元素,其长度是不会改变的。

关于这一点,大家可以把数组理解为是一个特殊的对象,其中的每一项转换为对象的伪代码为:

key: value
// 对应:
0: 1
1: 2
2: 3
length: 3

所以我们使用delete操作符删除一个数组元素时,相当于移除了数组中的一个属性,被删除的元素已经不再属于该数组。但是这种改变并不会影响数组的length属性。

扩展:

  • 如果你想让一个数组元素继续存在但是其值是 undefined,那么可以使用将 undefined 赋值给这个元素而不是使用 delete。例如:arr[1] = undefined
  • 如果你想通过改变数组的内容来移除一个数组元素,请使用splice() 方法。例如:arr.splice(1, 1)