Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Object.keys()

この翻訳は不完全です。英語から この記事を翻訳 してください。

概要

与えられたオブジェクト自身に存在する列挙可能なプロパティの配列を、for-in ループで提供されるものと同じ順番で返します (for-in ループとの違いは、for-in ループではプロトタイプチェインのプロパティも列挙することです)。

構文

Object.keys(obj)

引数

obj
自身の列挙可能なプロパティが返されるオブジェクトです。

説明

Object.keys は、object で直接発見された列挙可能なプロパティに対応する文字列を要素とする配列を返します。プロパティの順序は、オブジェクトのプロパティをループにより手動で取得した場合と同じです。

var arr = ["a", "b", "c"];
alert(Object.keys(arr)); // "0,1,2" とアラート表示するでしょう

// array like object
var obj = { 0 : "a", 1 : "b", 2 : "c"};
alert(Object.keys(obj)); // "0,1,2" とアラート表示するでしょう

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

alert(Object.keys(my_obj)); // foo のみがアラート表示されるでしょう

列挙可能ではないものを含むすべてのプロパティを取得したい場合は、Object.getOwnPropertyNames をご覧ください。

Notes

In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError. In ES6, a non-object argument will be coerced to an object.

Object.keys("foo");
// TypeError: "foo" is not an object (ES5 code)

Object.keys("foo");
// ["0", "1", "2"]                   (ES6 code)

互換性

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;
    };
  }());
}

Please note that the above code includes non-enumerable keys in IE7 (and maybe IE8), when passing in an object from a different window

より簡素なブラウザ間の互換性については Javascript - Object.keys Browser Compatibility をご覧ください。

仕様書

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
Object.keys の定義
標準 Initial definition. Implemented in JavaScript 1.8.5.
ECMAScript 2015 (6th Edition, ECMA-262)
Object.keys の定義
標準  
ECMAScript 2017 Draft (ECMA-262)
Object.keys の定義
ドラフト  

ブラウザ互換性

Kangax's compat table に基づきます。

機能 Firefox (Gecko) Chrome Internet Explorer Opera Safari
基本サポート 4 (2.0) 5 9 12 5
機能 Firefox Mobile (Gecko) Android IE Mobile Opera Mobile Safari Mobile
基本サポート ? ? ? ? ?

参考情報

ドキュメントのタグと貢献者

 このページの貢献者: lv7777, teoli, ethertank, yyss
 最終更新者: lv7777,