2017-06-16 93 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);

相关问题