【问题标题】:Is it possible to parse all public variables of an object in javascript?是否可以在javascript中解析对象的所有公共变量?
【发布时间】:2017-11-18 14:45:54
【问题描述】:

假设我有一个包含一组公共变量和私有变量的对象

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

【问题讨论】:

  • var keys = Object.keys(obj);? + typeof.
  • Javascript 真的不太关心类型。您会注意到所有这些对象都被初始化为 var。为什么需要知道类型?
  • 哦,我想做的事需要打字。我想根据类型生成特定的 html 标签
  • @zerkms 你能把它写成一个答案吗?)。
  • 好的,那么谢谢你

标签: javascript parsing object types public


【解决方案1】:

试试这个:

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

【讨论】:

  • 这就是 es6 的特性!
【解决方案2】:

你可以很容易地使用 for in loop 来制作这样的函数:

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]);
            }
        }
    }
}

【讨论】:

  • 感谢您在不使用 es6 功能的情况下解决了我的问题。
  • typeof 返回的值不能准确反映值的type,例如typeof Null 返回“对象”,但其类型为 Null
  • @RobG,当然,但这是 javascript 中的错误,而不是我的代码中的错误。如果它对你来说真的那么重要,你可以创建一个function getTypeOf(val) { return (val===null) ? 'null' : typeof val; } 并在我的代码中使用它。
  • 这不是我的问题,而是 OP 的问题:“检索公共变量的 ... 类型”。
【解决方案3】:

您没有在 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);

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 2020-04-12
    • 1970-01-01
    • 2014-01-02
    • 2019-10-28
    • 2016-10-17
    • 2011-12-03
    • 2015-06-19
    相关资源
    最近更新 更多