.getOwnPropertyNames()
指定されたオブジェクトの直接的な全ての(列挙可のものも、そうで無いものも)プロパティの配列を返します。
文法
Object.getOwnPropertyNames(obj)
引数 | 説明 |
---|---|
obj | 列挙可能(enumerable)、列挙不可(non-enumerable)のプロパティを返す対象のオブジェクトを指定します。 |
Object.getOwnPropertyNames
は配列を返し、
その配列の要素には、列挙可能、列挙不可に関わらずobj
の直接的なプロパティに対応する文字列が格納されます。
配列内の列挙可能なプロパティの並び順は、オブジェクトのプロパティが
for...inループ(または、Object.keys)したことによる並び替えによって構成されます。
配列内と列挙可能なプロパティに混じった列挙不可なプロパティの並び順は、定義されません。
例
var arr = ["a", "b", "c"];
// "0,1,2,length"を出力
print(Object.getOwnPropertyNames(arr).sort());
// 配列風のオブジェクト
var obj = { 0: "a", 1: "b", 2: "c"};
// "0,1,2"を出力
print(Object.getOwnPropertyNames(obj).sort());
// Array.forEachを使用してプロパティ名と値を出力
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
print(val + " -> " + obj[val]);
});
// 出力
// 0 -> a
// 1 -> b
// 2 -> c
// 列挙不可のプロパティ
var my_obj = Object.create({},
{
getFoo: {
value: function(){
return this.foo;
},
enumerable: false
}
});
my_obj.foo = 1;
// "foo, getFoo"を出力
print(Object.getOwnPropertyNames(my_obj).sort());
もし列挙可能なプロパティのみを必要とするのであれば、Object.keysを参照するか、 for...inを使用します。 (ただし、後者はhasOwnProperty()を使用しないと、 そのオブジェクトの直接的なプロパティでを対象にするのではなく、 プロトタイプチェーンに沿ったプロパティも対象にしていしまいます。)
プロトタイプチェーン上の項目は、リストに列挙されません。
function ParentClass () {
}
ParentClass.prototype.inheritedMethod = function () {
};
function ChildClass () {
this.prop = 5;
this.method = function () {};
}
ChildClass.prototype = new ParentClass;
ChildClass.prototype.prototypeMethod = function () {
};
alert(
Object.getOwnPropertyNames(
new ChildClass() // ["prop", "method"]
)
)
列挙不可のプロパティのみを取得
var target = myObject;
var enum_and_nonenum = Object.getOwnPropertyNames(target);
var enum_only = Object.keys(target);
var nonenum_only = enum_and_nonenum.filter(function(key) {
var indexInEnum = enum_only.indexOf(key)
if (indexInEnum == -1) {
// enum_onlyのキーは列挙可能であるプロパティであるため、
// ここで見つからないものに対してtrueを返すことで、
// このフィルターは役割を果たします。
return true;
} else {
return false;
}
});
console.log(nonenum_only);
仕様
ブラウザ互換性
機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
---|---|---|---|---|---|
基本 | 5 | 4.0 (2) | 9 | 12 | 5 |
機能 | Android | Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
---|---|---|---|---|---|
基本 | ? | ? | ? | ? | ? |
Based on Kangax's compat table.
SpiderMonkey固有の注意事項
SpiderMonkey 28(Firefox 28 / Thunderbird 28 / SeaMonkey 2.25)以前は、 Object.getOwnPropertyNamesはErrorオブジェクトの未解決(?)プロパティを参照していませんでした。 これは以降のバージョンで修正されました。(bug 724768)
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。