Array.prototype.shift()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

shift()Array インスタンスのメソッドで、配列から最初の要素を取り除き、その要素を返します。このメソッドは配列の長さを変えます。

試してみましょう

const array1 = [1, 2, 3];

const firstElement = array1.shift();

console.log(array1);
// Expected output: Array [2, 3]

console.log(firstElement);
// Expected output: 1

構文

js
shift()

引数

なし。

返値

配列から取り除かれた要素を返します。配列が空の場合は、undefined を返します。

解説

shift() メソッドは 0 番目の位置の要素を取り除き、続く位置の値を小さい方向にずらします。 そして、削除された値を返します。length プロパティが 0 の場合、undefined を返します。

pop() メソッドは shift() と似た動作をしますが、こちらは配列の末尾の要素に適用されます。

shift() メソッドは変更メソッドです。長さと this の内容を変更します。 this の値を変化させず、最初の要素を取り除いた新しい配列を返したい場合は、代わりに arr.slice(1) を使用することができます。

shift() メソッドは汎用的です。これは this 値に length プロパティと整数キーのプロパティがあることだけを期待します。文字列も配列風ですが、文字列は不変であるため、このメソッドを適用するのは適切ではありません。

配列から要素を除去

以下のコードは myFish 配列を、その最初の要素を取り除く前後で表示します。また、取り除いた要素も表示します。

js
const myFish = ["angel", "clown", "mandarin", "surgeon"];

console.log("myFish 処理前:", myFish);
// myFish 処理前: ['angel', 'clown', 'mandarin', 'surgeon']

const shifted = myFish.shift();

console.log("myFish 処理後:", myFish);
// myFish 処理後: ['clown', 'mandarin', 'surgeon']

console.log("取り除いた要素:", shifted);
// 取り除いた要素: angel

shift() メソッドの while ループ内での使用

shift() メソッドは時に、 while 文の条件内において用いられます。以下のコードでは、要素がすべて無くなるまで、反復処理のたびにその配列内の次の要素を取り除きます。

js
const names = ["Andrew", "Tyrone", "Paul", "Maria", "Gayatri"];

while (typeof (i = names.shift()) !== "undefined") {
  console.log(i);
}
// Andrew, Tyrone, Paul, Maria, Gayatri

配列以外のオブジェクトに対する shift() の呼び出し

shift() メソッドは thislength プロパティを読み込みます。正規化された長さが 0 の場合、length は再び 0 に設定されます(以前は負の値または undefined であった可能性があります)。そうでない場合は、 0 のプロパティを返し、残りのプロパティは左に 1 つシフトされます。 length プロパティは 1 つデクリメントされます。

js
const arrayLike = {
  length: 3,
  unrelated: "foo",
  2: 4,
};
console.log(Array.prototype.shift.call(arrayLike));
// undefined。空のスロットであるため
console.log(arrayLike);
// { '1': 4, length: 2, unrelated: 'foo' }

const plainObj = {};
// length プロパティがないため、 length は 0
Array.prototype.shift.call(plainObj);
console.log(plainObj);
// { length: 0 }

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-array.prototype.shift

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
shift

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報