keys

  • リビジョンの URL スラッグ: JavaScript/Reference/Global_Objects/Object/keys
  • リビジョンのタイトル: keys
  • リビジョンの ID: 293030
  • 作成日:
  • 作成者: yyss
  • 現行リビジョン いいえ
  • コメント

このリビジョンの内容

{{ js_minversion_header("1.8.5") }}

概要

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

Method of Object
Implemented in JavaScript 1.8.5
ECMAScript Edition ECMAScript 5th Edition

構文

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 をご覧ください。

互換性

Object.keys をネイティブにサポートしていない環境向けに互換性を確保するため、以下のコード部品をコピーしましょう:

if (!Object.keys) {
  Object.keys = (function () {
    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 = []

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

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

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

ブラウザのサポート

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

{{ CompatibilityTable() }}

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

参考情報

このリビジョンのソースコード

<p>{{ js_minversion_header("1.8.5") }}</p>
<h2 id="Summary" name="Summary">概要</h2>
<p>与えられたオブジェクト自身に存在する列挙可能なプロパティの配列を、<a href="/ja/docs/JavaScript/Reference/Statements/for...in" title="ja/docs/JavaScript/Reference/Statements/for...in"><code>for-in</code></a> ループで提供されるものと同じ順番で返します (for-in ループとの違いは、for-in ループではプロトタイプチェインのプロパティも列挙することです)。</p>
<table class="standard-table">
  <thead>
    <tr>
      <th class="header" colspan="2">Method of <a href="/ja/docs/JavaScript/Reference/Global_Objects/Object" title="ja/docs/JavaScript/Reference/Global_Objects/Object"><code>Object</code></a></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Implemented in</td>
      <td>JavaScript 1.8.5</td>
    </tr>
    <tr>
      <td>ECMAScript Edition</td>
      <td>ECMAScript 5th Edition</td>
    </tr>
  </tbody>
</table>
<h2 id="Syntax" name="Syntax">構文</h2>
<p><code>Object.keys(<em>obj</em>)</code></p>
<h2 id="Parameters" name="Parameters">引数</h2>
<dl>
  <dt>
    obj</dt>
  <dd>
    自身の列挙可能なプロパティが返されるオブジェクトです。</dd>
</dl>
<h2 id="Description" name="Description">説明</h2>
<p><code>Object.keys</code> は、<code>object</code> で直接発見された列挙可能なプロパティに対応する文字列を要素とする配列を返します。プロパティの順序は、オブジェクトのプロパティをループにより手動で取得した場合と同じです。</p>
<h2 id="Examples">例</h2>
<pre class="brush: js">
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 のみがアラート表示されるでしょう
</pre>
<p>列挙可能ではないものを含むすべてのプロパティを取得したい場合は、<a href="/ja/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="ja/docs/JavaScript/Reference/Global Objects/Object/getOwnPropertyNames">Object.getOwnPropertyNames</a> をご覧ください。</p>
<h2 id="Compatiblity">互換性</h2>
<p><code>Object.keys</code> をネイティブにサポートしていない環境向けに互換性を確保するため、以下のコード部品をコピーしましょう:</p>
<pre class="brush: js">
if (!Object.keys) {
  Object.keys = (function () {
    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' &amp;&amp; typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object')

      var result = []

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

      if (hasDontEnumBug) {
        for (var i=0; i &lt; dontEnumsLength; i++) {
          if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i])
        }
      }
      return result
    }
  })()
};
</pre>
<p>より簡素なブラウザ間の互換性については <a class="external" href="http://tokenposts.blogspot.com.au/2012/04/javascript-objectkeys-browser.html">Javascript - Object.keys Browser Compatibility</a> をご覧ください。</p>
<h2 id="Browser_support">ブラウザのサポート</h2>
<p><a class="external" href="http://kangax.github.com/es5-compat-table/">Kangax's compat table</a> に基づきます。</p>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
  <table class="compat-table">
    <tbody>
      <tr>
        <th>機能</th>
        <th>Firefox (Gecko)</th>
        <th>Chrome</th>
        <th>Internet Explorer</th>
        <th>Opera</th>
        <th>Safari</th>
      </tr>
      <tr>
        <td>基本サポート</td>
        <td>4 (2.0)</td>
        <td>5</td>
        <td>9</td>
        <td>12</td>
        <td>5</td>
      </tr>
    </tbody>
  </table>
</div>
<div id="compat-mobile">
  <table class="compat-table">
    <tbody>
      <tr>
        <th>機能</th>
        <th>Firefox Mobile (Gecko)</th>
        <th>Android</th>
        <th>IE Mobile</th>
        <th>Opera Mobile</th>
        <th>Safari Mobile</th>
      </tr>
      <tr>
        <td>基本サポート</td>
        <td>{{ CompatUnknown() }}</td>
        <td>{{ CompatUnknown() }}</td>
        <td>{{ CompatUnknown() }}</td>
        <td>{{ CompatUnknown() }}</td>
        <td>{{ CompatUnknown() }}</td>
      </tr>
    </tbody>
  </table>
</div>
<h2 id="See_also" name="See_also">参考情報</h2>
<ul>
  <li><a href="/ja/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable" title="ja/docs/JavaScript/Reference/Global Objects/Object/propertyIsEnumerable">propertyIsEnumerable</a></li>
  <li><a href="/ja/docs/JavaScript/Reference/Global_Objects/Object/create" title="ja/docs/JavaScript/Reference/Global Objects/Object/create">Object.create</a></li>
  <li><a href="/ja/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="ja/docs/JavaScript/Reference/Global Objects/Object/getOwnPropertyNames">Object.getOwnPropertyNames</a></li>
  <li><a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=307791">Bug 307791</a> -<span id="summary_alias_container"> <span id="short_desc_nonedit_display">Implement ES5's Object.keys(O)</span> </span></li>
</ul>
Revert to this revision