2017-11-13 3 views
0

ここにコードがあります。私の関数はオブジェクトArrayでは機能しませんが、オブジェクトリテラルで定義されたオブジェクトobにはありません。組み込みオブジェクト一番好きななぜ私の関数は配列のすべてのプロパティを表示しませんが、obに対しては機能しません。

function all_properties(object) { 
 
\t var value = "["; 
 
\t for (var prop in object) { 
 
\t \t 
 
\t \t \t value += '"' + prop + '"' + "," 
 
\t } 
 
\t value = value.slice(0,-1); 
 
\t value += "]"; 
 
\t return value; 
 
} 
 

 
var ob = {first: 1, second: function() {}, third: function() {}} 
 
console.log(all_properties(ob)) 
 
console.log(all_properties(Array))

+1

あなたは 'JSON.stringify()'を使うべきです。 – SLaks

+0

最後の行で使用したArrayはどこで定義しましたか? – M98

答えて

6

、(配列ではありません)Arrayコンストラクタのプロパティがnon-enumerableとしてマークされているので、for inは、それらを表示されません。

Object.getOwnPropertyDescriptors()を参照してください。すべてプロパティを参照してください。

+0

また、 'Object.getOwnPropertyNames()'も機能します。これら2つの方法の違いは何ですか? – LearningMath

+0

'Object.getOwnPropertyDescriptors()'は、指定されたオブジェクトと記述子からのプロパティ(書き込み可能か、列挙可能なのかなど)を持つ新しいオブジェクトを返します。 '.getOwnPropertyNames()'は、 。 '.getOwnPropertyNames()'がより一般的に使用されます –

+0

@LearningMath:ドキュメントを参照してください。 – SLaks

関連する問題