2017-06-16 94 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

'變種鍵= Object.keys(OBJ);'? +'typeof'。 – zerkms

+0

Javascript真的不關心類型。你會注意到所有這些對象都被初始化爲變量。爲什麼你需要知道類型? –

+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)? 'null':typeof 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正常,那麼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);

相關問題