Javascript属性反射

Javascript属性反射,javascript,reflection,properties,Javascript,Reflection,Properties,首先,让我警告你,我不是javascript大师。 我已经发现了一些关于这个话题的问题,但几乎所有的问题都用相同的答案回答。 我有一个简单的自定义javascript对象: var errorMsg ={ msg1 : "x", msg2 : "y", msg3 : "z", msg4 : "t" } 我想从对象中获取所有属性名称,如[“msg1”、“msg2”、“msg3”、“msg4”]。 正如我所说,几乎所有的解决方案都指向使用for/in

首先,让我警告你,我不是javascript大师。 我已经发现了一些关于这个话题的问题,但几乎所有的问题都用相同的答案回答。 我有一个简单的自定义javascript对象:

var errorMsg ={
      msg1 : "x",
      msg2 : "y",
      msg3 : "z",
      msg4 : "t"
}
我想从对象中获取所有属性名称,如[“msg1”、“msg2”、“msg3”、“msg4”]。 正如我所说,几乎所有的解决方案都指向使用for/in循环来迭代所有属性名。但我的应用程序将在IE6及以上版本中运行,我研究发现IE不支持这个循环,至少不支持IE6。那我该怎么办? 最后一个问题是,在哪里可以找到好的javascript参考?我看到这个对象有一个返回键的方法,比如Object.keys(),我在哪里可以找到一个好的引用,它提供了与javascript内置对象相关的所有属性和方法?

首先,看看我们刚才讨论的地方。但由于这里使用的是对象而不是数组,因此并非所有答案都适用。在这里,您需要确保使用的解决方案涉及
hasOwnProperty


在引用方面,我总是使用。这里列出的所有东西都是高质量的。请注意,并不是所有列出的内容都会同样适用于所有浏览器。

如果for in没有选项,您可以使用包含消息对象的数组。您可以通过这种方式使用标准for循环

var errorMsg = [
      { name : "msg1", value : "x" },
      { name : "msg2", value : "y" },
      { name : "msg3", value : "z" },
      { name : "msg4", value : "t" }
];

但是,您不能再通过名称访问消息了-将消息名称映射到
errorMsg
中的索引可能是一种解决方法。

您可以定义一种通用方法,用于从任何对象返回键数组, 并使用函数的调用方法对errorMsg对象进行操作:

var errorMsg={
    msg1:"x",
    msg2:"y",
    msg3:"z",
    msg4:"t"
}
function keyArray(){
    var A= [];
    for(var p in this){
        if(this.hasOwnProperty(p)) A.push(p);
    }
    return A;
}
keyArray.call(errorMsg)

/*  returned value: (Array)
msg1,msg2,msg3,msg4
*/

MDN是解决这类问题的最佳资源:您在哪里读到IE6不支持for…in?关于参考:另外,IE6已经快死了,帮它死吧。。。。