我如何枚举一个JavaScript对象的属性?
我实际上想列出所有已定义的变量及其值,但我已经了解到,定义变量实际上创建了窗口对象的属性。
我如何枚举一个JavaScript对象的属性?
我实际上想列出所有已定义的变量及其值,但我已经了解到,定义变量实际上创建了窗口对象的属性。
当前回答
下面是如何枚举一个对象的属性:
var params = { name: 'myname', age: 'myage' }
for (var key in params) {
alert(key + "=" + params[key]);
}
其他回答
使用for..in循环来枚举对象的属性,但要小心。枚举不仅返回被枚举对象的属性,还返回任何父对象原型的属性。
var myObject = {foo: 'bar'};
for (var name in myObject) {
alert(name);
}
// results in a single alert of 'foo'
Object.prototype.baz = 'quux';
for (var name in myObject) {
alert(name);
}
// results in two alerts, one for 'foo' and one for 'baz'
为了避免在枚举中包含继承的属性,检查hasOwnProperty():
for (var name in myObject) {
if (myObject.hasOwnProperty(name)) {
alert(name);
}
}
编辑:我不同意JasonBunting的声明,我们不需要担心枚举继承的属性。枚举您不期望的继承属性是危险的,因为它可能改变代码的行为。
其他语言中是否存在这个问题并不重要;事实上,它是存在的,并且JavaScript特别容易受到攻击,因为对对象原型的修改会影响子对象,即使修改发生在实例化之后。
这就是为什么JavaScript提供hasOwnProperty(),这就是为什么你应该使用它,以确保第三方代码(或任何其他可能修改原型的代码)不会破坏你的。除了增加一些额外字节的代码外,使用hasOwnProperty()没有任何缺点。
我找到了……For (property in object) {// do stuff}将列出所有属性,因此所有全局声明的变量在窗口对象上。
简单JavaScript代码:
for(var propertyName in myObject) {
// propertyName is what you want.
// You can get the value like this: myObject[propertyName]
}
jQuery:
jQuery.each(obj, function(key, value) {
// key is what you want.
// The value is in: value
});
for (prop in obj) {
alert(prop + ' = ' + obj[prop]);
}
你可以使用for of循环。
如果你想要一个数组,请使用:
种(中的object1)
Ref。种()