JavaScript:'shift'方法背后的逻辑是什么?

use*_*523 4 javascript arrays shift

基本上,如何返回并删除数组的第一个元素而不使用shift()或splice()方法(或任何其他方法)?

提前致谢!

T.J*_*der 6

"转变"方法背后的逻辑是什么?

在规范中有详细描述.

基本上,如何返回并删除数组的第一个元素而不使用shift()或splice()方法(或任何其他方法)?

我看不到任何好的理由这样的限制,但你可以使用一个循环来手动指定每个条目的一个上面的值(末开始),直到你想改变索引,然后设置length的数组减少一个.有点模糊的东西(我确信这不是完整的实现shift):

实例 | 直播源

var n;
for (n = theArray.length - 2; n >= removeAt; --n) {
    theArray[n] = theArray[n+1];
}
--theArray.length;
Run Code Online (Sandbox Code Playgroud)

更改length数组的属性将删除任何不再长度的元素.

您还可以使用以下方法删除元素而不更改数组的长度delete:

delete theArray[removeAt];
Run Code Online (Sandbox Code Playgroud)

数组的长度将保持不变,但在该位置将不再有条目(根本没有).它变得稀疏(如果它还没有).这是有效的,因为该delete语句从对象中删除属性,而无类型的JavaScript数组实际上只是对象.

  • 您也可以手动将每个元素向左移动一个位置. (2认同)