From fdf2f21fa554b19bf34789f1e9078a72e98832f9 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Mon, 6 Nov 2023 08:37:53 +0900 Subject: [PATCH] =?UTF-8?q?2023/09/07=20=E6=99=82=E7=82=B9=E3=81=AE?= =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/array/keys/index.md | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/array/keys/index.md b/files/ja/web/javascript/reference/global_objects/array/keys/index.md index 2bb10c22c7495e..3d83bb43b34ac0 100644 --- a/files/ja/web/javascript/reference/global_objects/array/keys/index.md +++ b/files/ja/web/javascript/reference/global_objects/array/keys/index.md @@ -2,28 +2,40 @@ title: Array.prototype.keys() slug: Web/JavaScript/Reference/Global_Objects/Array/keys l10n: - sourceCommit: 968e6f1f3b6f977a09e116a0ac552459b741eac3 + sourceCommit: e01fd6206ce2fad2fe09a485bb2d3ceda53a62de --- {{JSRef}} -**`keys()`** メソッドは、配列内の各インデックスのキーを含む、新しい**配列イテレーター**オブジェクトを返します。 +**`keys()`** は {{jsxref("Array")}} インスタンスのメソッドで、配列内の各インデックスのキーを含む、新しい[配列イテレーター](/ja/docs/Web/JavaScript/Reference/Global_Objects/Iterator)オブジェクトを返します。 {{EmbedInteractiveExample("pages/js/array-keys.html")}} ## 構文 -```js -keys(); +```js-nolint +keys() ``` +### 引数 + +なし。 + ### 返値 -新しい {{jsxref("Array")}} のイテレーターオブジェクトです。 +新しい[反復可能なイテレーターオブジェクト](/ja/docs/Web/JavaScript/Reference/Global_Objects/Iterator)です。 + +## 解説 + +[疎配列](/ja/docs/Web/JavaScript/Guide/Indexed_collections#sparse_arrays)で使用した場合、 `keys()` メソッドは空のスロットを `undefined` という値があるかのように反復処理します。 + +`keys()` メソッドは[汎用的](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#汎用的な配列メソッド)です。これは `this` 値に `length` プロパティと整数キーのプロパティがあることだけを期待します。 ## 例 -### 不連続を無視しないキーイテレーター +### 疎配列に対する keys() の呼び出し + +配列に実際に存在するキーだけを処理する {{jsxref("Object.keys()")}} とは異なり、 `keys()` イテレーターは見つからないプロパティを表す穴を無視しません。 ```js const arr = ["a", , "c"]; @@ -33,6 +45,22 @@ console.log(sparseKeys); // ['0', '2'] console.log(denseKeys); // [0, 1, 2] ``` +### 配列以外のオブジェクトに対する keys() の呼び出し + +`keys()`メソッドは `this` の `length` プロパティを読み込み、 0 から `length - 1` までのすべての整数インデックスを返します。実際にはインデックスアクセスは行われません。 + +```js +const arrayLike = { + length: 3, +}; +for (const entry of Array.prototype.keys.call(arrayLike)) { + console.log(entry); +} +// 0 +// 1 +// 2 +``` + ## 仕様書 {{Specifications}} @@ -44,6 +72,10 @@ console.log(denseKeys); // [0, 1, 2] ## 関連情報 - [`Array.prototype.keys` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-array) -- {{jsxref("Array.prototype.values()")}} +- [インデックス付きコレクション](/ja/docs/Web/JavaScript/Guide/Indexed_collections)のガイド +- {{jsxref("Array")}} - {{jsxref("Array.prototype.entries()")}} -- [反復処理プロトコル](/ja/docs/Web/JavaScript/Reference/Iteration_protocols) +- {{jsxref("Array.prototype.values()")}} +- [`Array.prototype[@@iterator]()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator) +- {{jsxref("TypedArray.prototype.keys()")}} +- [Iteration protocols](/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)