变量obj={name:“西蒙”,年龄:“20”,服装:{style:“简单”,嬉皮士:假}}for(obj中的var propt){console.log(propt+':'+obj[propt]);}
变量propt如何表示对象的财产?它不是内置方法或属性。为什么它会产生对象中的每个属性?
变量obj={name:“西蒙”,年龄:“20”,服装:{style:“简单”,嬉皮士:假}}for(obj中的var propt){console.log(propt+':'+obj[propt]);}
变量propt如何表示对象的财产?它不是内置方法或属性。为什么它会产生对象中的每个属性?
当前回答
迭代财产需要额外的hasOwnProperty检查:
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
// do stuff
}
}
这是必要的,因为对象的原型包含对象的附加财产,这些属性在技术上是对象的一部分。这些附加的财产继承自基本对象类,但仍然是obj的财产。
hasOwnProperty只是检查这是否是该类特有的属性,而不是从基类继承的属性。
也可以通过对象本身调用hasOwnProperty:
if (obj.hasOwnProperty(prop)) {
// do stuff
}
但如果对象具有同名的不相关字段,则此操作将失败:
var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo'); // TypeError: hasOwnProperty is not a function
这就是为什么通过Object.prototype调用它更安全的原因:
var obj = { foo: 42, hasOwnProperty: 'lol' };
Object.prototype.hasOwnProperty.call(obj, 'foo'); // true
其他回答
迭代财产需要额外的hasOwnProperty检查:
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
// do stuff
}
}
这是必要的,因为对象的原型包含对象的附加财产,这些属性在技术上是对象的一部分。这些附加的财产继承自基本对象类,但仍然是obj的财产。
hasOwnProperty只是检查这是否是该类特有的属性,而不是从基类继承的属性。
也可以通过对象本身调用hasOwnProperty:
if (obj.hasOwnProperty(prop)) {
// do stuff
}
但如果对象具有同名的不相关字段,则此操作将失败:
var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo'); // TypeError: hasOwnProperty is not a function
这就是为什么通过Object.prototype调用它更安全的原因:
var obj = { foo: 42, hasOwnProperty: 'lol' };
Object.prototype.hasOwnProperty.call(obj, 'foo'); // true
for循环遍历对象的所有财产。propt在for循环的第一行中定义。它是一个字符串,是obj对象的属性的名称。在循环的第一次迭代中,propt将是“name”。
你可以使用Lodash。文件
var obj = {a: 1, b: 2, c: 3};
_.keys(obj).forEach(function (key) {
...
});
let obj = {"a": 3, "b": 2, "6": "a"}
Object.keys(obj).forEach((item) => {console.log("item", obj[item])})
// a
// 3
// 2
这只是为了。。。在循环中。查看Mozilla的文档。