--- title: Array.prototype.keys() short-title: keys() slug: Web/JavaScript/Reference/Global_Objects/Array/keys page-type: javascript-instance-method browser-compat: javascript.builtins.Array.keys sidebar: jsref --- The **`keys()`** method of {{jsxref("Array")}} instances returns a new _[array iterator](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator)_ object that contains the keys for each index in the array. {{InteractiveExample("JavaScript Demo: Array.prototype.keys()")}} ```js interactive-example const array = ["a", "b", "c"]; const iterator = array.keys(); for (const key of iterator) { console.log(key); } // Expected output: 0 // Expected output: 1 // Expected output: 2 ``` ## Syntax ```js-nolint keys() ``` ### Parameters None. ### Return value A new [iterable iterator object](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator). ## Description When used on [sparse arrays](/en-US/docs/Web/JavaScript/Guide/Indexed_collections#sparse_arrays), the `keys()` method iterates empty slots as if they have the value `undefined`. The `keys()` method is [generic](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#generic_array_methods). It only expects the `this` value to have a `length` property and integer-keyed properties. ## Examples ### Using keys() on sparse arrays Unlike {{jsxref("Object.keys()")}}, which only includes keys that actually exist in the array, the `keys()` iterator doesn't ignore holes representing missing properties. ```js const arr = ["a", , "c"]; const sparseKeys = Object.keys(arr); const denseKeys = [...arr.keys()]; console.log(sparseKeys); // ['0', '2'] console.log(denseKeys); // [0, 1, 2] ``` ### Calling keys() on non-array objects The `keys()` method reads the `length` property of `this` and then yields all integer indices between 0 and `length - 1`. No index access actually happens. ```js const arrayLike = { length: 3, }; for (const entry of Array.prototype.keys.call(arrayLike)) { console.log(entry); } // 0 // 1 // 2 ``` ## Specifications {{Specifications}} ## Browser compatibility {{Compat}} ## See also - [Polyfill of `Array.prototype.keys` in `core-js`](https://github.com/zloirock/core-js#ecmascript-array) - [es-shims polyfill of `Array.prototype.keys`](https://www.npmjs.com/package/array.prototype.keys) - [Indexed collections](/en-US/docs/Web/JavaScript/Guide/Indexed_collections) guide - {{jsxref("Array")}} - {{jsxref("Array.prototype.entries()")}} - {{jsxref("Array.prototype.values()")}} - [`Array.prototype[Symbol.iterator]()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Symbol.iterator) - {{jsxref("TypedArray.prototype.keys()")}} - [Iteration protocols](/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)