2017-06-16 4 views
0

は、私はパブリック変数とプライベートなものjavascriptでオブジェクトのすべてのパブリック変数を解析することはできますか?

function myObj() 
{ 
    var private1 = 1; 
    var private2 = 2; 
    this.func = function(){console.log('anything');}; 
    this.public1 = 3; 
    this.public2 = '4'; 
} 

のセットを持つオブジェクトは、オブジェクトを解析し、パブリック変数の名前、値、およびタイプを取得することができます関数を作成する方法はあります持っている想像してみてください。

この関数のプロトタイプは次のようになります。

parseObj(object) 

コンソール結果は次のようになります。

>object has public1 with value 3 of type Number 
>object has public2 with value 4 of type String 
+2

'VARキー= Object.keys(OBJ);'? + 'typeof'です。 – zerkms

+0

Javascriptは実際には型についてあまり気にしません。これらのオブジェクトはすべて、varsとして初期化されています。なぜあなたはそのタイプを知る必要がありますか? –

+0

私がしたいことにああタイプが必要です。私はタイプに応じて特定のhtmlタグを生成したいと思います。 – JSmith

答えて

2

あなたは非常に簡単にループにするためにを使用して、このような機能を行うことができます。

function parseObj(object) { 
    for(var name in object) { 
     if(object.hasOwnProperty(name)) { 
      // ignoring methods 
      if(typeof object[name] !== 'function') { 
       console.log('object has '+name+' with value '+object[name]+' of type '+typeof object[name]); 
      } 
     } 
    } 
} 
+0

es6機能を使用せずに問題を解決していただきありがとうございます。 – JSmith

+0

[* typeof *](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-typeof-operator)から返される値は、値の[* type *]を正確に反映しません。 (http://www.ecma-international.org/ecma-262/7.0/index.html#sec-ecmascript-data-types-and-values)、例えば'typeof Null'は" object "を返しますが、その型は* Null *です。 – RobG

+0

@RobG、確かに、私のコードではなく、javascriptのバグです。それが本当にあなたにとって重要なのであれば、 'function getTypeOf(val){return(val === null)? 'ヌル':型のval; } 'と私のコードで使用します。 – guitarino

2

はこれを試してみてください:

Object.entries(object).forEach((prop) => { 
    const [name, value] = prop; 
    console.log(`object has ${name} with value of ${value} and type ${typeof(value)}`) 
}) 

私はコンソールでこれを取得する:

// object has func with value of function(){console.log('anything');} and type function 
// object has public1 with value of 3 and type number 
// object has public2 with value of 4 and type string 
+1

それはes6の機能です! –

+0

あなたはコードを説明していただけますか? – JSmith

1

あなたはOPで「ないのECMAScript 2015」の条件が含まれていませんでした。 ECMAScript 5.1がOKの場合、Object.keysは独自のプロパティを返します(polyfill on MDN)。

値の型を正確に返す組み込み関数はありません(ただし、これはかなり簡単に行うことができます)。 typeofは有用ですが型に一致しない値を返します。

typeof function(){} 

は "関数"型を返します。また、ホストオブジェクトは様々な値を返すことがあります(「不明」など)。

function myObj() 
 
{ 
 
    var private1 = 1; 
 
    var private2 = 2; 
 
    this.func = function(){console.log('anything');}; 
 
    this.public1 = 3; 
 
    this.public2 = '4'; 
 
} 
 

 
var obj = new myObj(); 
 

 
function showProps(obj) { 
 
    Object.keys(obj).forEach(function(key) { 
 
    console.log('object has ' + key + ' with value ' + obj[key] + 
 
       ' with typeof ' + (typeof obj[key])); 
 
    }); 
 
} 
 

 
showProps(obj);

関連する問題