【问题标题】:Javascript distinguish a function in an objectJavascript区分对象中的函数
【发布时间】:2012-06-20 09:25:57
【问题描述】:

拥有这样的对象:

var a = {

  b: "string",
  c: function(){
    return "i return a string"; 
  }    
}

在做

for (var key in a) {
    console.log(typeof key);
};

返回“string”、“string”,因为 b 是一个字符串,而 c 返回一个字符串。

有没有返回 c -> 函数的函数?

【问题讨论】:

    标签: javascript object typeof


    【解决方案1】:

    返回“string”、“string”,因为 b 是一个字符串,c 返回一个字符串。

    。之所以返回string,是因为属性名b和属性名c都是字符串;您现在正在迭代对象的键,而不是它们的值。

    你可以引入属性d,这是一个返回数字或布尔值的函数,你仍然会得到string

    相反,枚举值本身;

    for (var x in a) {
        console.log(typeof a[x] );
    };
    

    【讨论】:

      【解决方案2】:

      如果您想查看属性的类型而不是其键,应将值与typeof 运算符一起使用。

      for (var key in a) {
          console.log(typeof a[key] );
      };
      

      【讨论】:

        【解决方案3】:

        基本上,您将始终通过遍历对象的键获得字符串,因为它们就是这样表示的。

        但是如果你例如做console.log(typeof a[key]); 那么你会得到预期的输出。

        【讨论】:

          【解决方案4】:

          改为:

          for (var key in a) {
              console.log(typeof a[key]);
          };​
          

          Live DEMO

          console.log(typeof key); // gives you the key - "c"
          console.log(typeof a[key]); // gives you the value of the "c" key - function.
          

          【讨论】:

            【解决方案5】:

            让我稍微解释一下,这样任何人都容易理解。 (无论如何,这是我在这里的第一篇文章。)

            试试下面的代码,它说它是一个函数

            console.log(typeof(a.c))
            

            但是您所写的是读取属性名称。请尝试以下代码以了解您的代码有什么问题。

            for (var key in a) {
                console.log(key);
            };
            

            所以基本上你得到的是正确的。因为所有属性名称都是字符串。 请记住 JSON 对象有几个限制,例如区分大小写、遍历属性所需的完整路径等。

            如下更改您的代码以获取您的属性的类型,

            解决方案 1:

            console.log(typeof(a[key]));
            

            解决方案 2:

            console.log(typeof(eval('a.'+ key)));
            

            【讨论】:

            • 我认为最好避免使用 eval 而使用 a[key],谢谢!
            猜你喜欢
            • 1970-01-01
            • 2019-03-19
            • 2018-03-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-20
            • 1970-01-01
            • 2012-08-26
            相关资源
            最近更新 更多