.keys()

オブジェクト自身が持つ列挙可能なプロパティの配列を返します。 並び順はfor...inループと同じになります。 (違いは、for-inループはプロトタイプチェーン内のプロパティも列挙することです。)

文法

Object.keys(obj)
引数 説明
obj 自身のプロパティを返す対象となるオブジェクトを指定します。

Object.keysは、対象となるオブジェクトの直接的なプロパティの文字列を格納した配列を返します。 オブジェクトの順番は、プロパティをループをさせて取得できる順番と同じになります。

var arr = ["a", "b", "c"];
console.log(Object.keys(arr));
// 出力結果: ["0", "1", "2"]

// 配列風のオブジェクト
var obj = { 0 : "a", 1 : "b", 2 : "c"};
console.log(Object.keys(obj));
// 出力結果: ["0", "1", "2"]

// 無作為なキー順序の配列風のオブジェクト
var an_obj = { 100: "a", 2: "b", 7: "c"};
console.log(Object.keys(an_obj));
// 出力結果: ["2", "7", "100"]

// getFooは列挙出来ないプロパティです。
var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo } } });
my_obj.foo = 1;

console.log(Object.keys(my_obj));
// 出力結果: ["foo"]

列挙出来ないプロパティを含む、全てのプロパティを必要とする場合は、 Object.getOwnPropertyNamesを参照してみてください。

Polyfill

Object.keysをネイティブでサポートしていない古い環境に、このメソッドの互換性を追加するには、 下記のコードをコピー・追加してください。

// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
  Object.keys = (function () {
    'use strict';
    var hasOwnProperty = Object.prototype.hasOwnProperty,
        hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
        dontEnums = [
          'toString',
          'toLocaleString',
          'valueOf',
          'hasOwnProperty',
          'isPrototypeOf',
          'propertyIsEnumerable',
          'constructor'
        ],
        dontEnumsLength = dontEnums.length;

    return function (obj) {
      if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
        throw new TypeError('Object.keys called on non-object');
      }

      var result = [], prop, i;

      for (prop in obj) {
        if (hasOwnProperty.call(obj, prop)) {
          result.push(prop);
        }
      }

      if (hasDontEnumBug) {
        for (i = 0; i < dontEnumsLength; i++) {
          if (hasOwnProperty.call(obj, dontEnums[i])) {
            result.push(dontEnums[i]);
          }
        }
      }
      return result;
    };
  }());
}

上記のコードは、異なるwindowからのオブジェクトが渡された際に、 IE7(もしかしたらIE8も)で列挙不可のキーも含んでしまうことに注意してください。

シンプルなPolyfillであれば、 Javascript - Object.keys Browser Compatibilityを参照してみてください。

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本 5 4.0 (2.0) 9 12 5
モバイル
機能 Android Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本 ? ? ? ? ?

Based on Kangax's compat table.

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。