Js中对象内部字段的访问
Access to internal object fields in Js
有这个代码
var a = {date : 12};
for(var t in a){
alert(t);
}
我有一个日期为 属性 的提醒。
但是到处(即here)我看到需要写:
for (var property in object) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
那么为什么我看不到对象的内部属性?
在JavaScript中存在'prototype chain',一种继承形式。如果您要将 属性 添加到 a
的原型,然后将您的 date
属性 直接添加到 a
,您的 for
循环会找到这两个属性。
hasOwnProperty
检查当前属性是否直接附加到上下文对象,或者是否通过原型链继承。
所以在我的示例中,如果您 已经 添加 属性 到 a
的原型,hasOwnProperty
条件将 return false 你不会 "do stuff" 用它。
for..in 语法迭代对象的每个 属性,包括在原型链 (如果它们是可枚举的) 上找到的对象。这通常不是您想要的,因此通常建议进行 hasOwnProperty
检查。
在你的情况下没有必要,因为你的普通对象没有从对象原型(它的原型链中唯一的东西)继承任何可枚举的属性
此外,for..in 会为您提供对象的 属性 names(键),如果您对特定 属性,你必须使用括号表示法,将你的示例扩展为:
var a = {date : 12};
for(var t in a){
alert(a[t]);
}
我想最好的理解方式是通过示例:
Object.prototype.aBaseProperty = 123;
var childObject = { date: 12 };
for (var property in childObject) {
console.log(property)
}
// output: date aBaseProperty
for (var property in childObject) {
if (childObject.hasOwnProperty(property)) {
console.log(property)
}
}
// output: date
此外,与其进行 hasOwnProperty
检查,您可能更喜欢
Object.keys(object).forEach(function(value, key) { ... });
其中 Object.keys
只会 return 拥有房产。
有这个代码
var a = {date : 12};
for(var t in a){
alert(t);
}
我有一个日期为 属性 的提醒。
但是到处(即here)我看到需要写:
for (var property in object) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
那么为什么我看不到对象的内部属性?
在JavaScript中存在'prototype chain',一种继承形式。如果您要将 属性 添加到 a
的原型,然后将您的 date
属性 直接添加到 a
,您的 for
循环会找到这两个属性。
hasOwnProperty
检查当前属性是否直接附加到上下文对象,或者是否通过原型链继承。
所以在我的示例中,如果您 已经 添加 属性 到 a
的原型,hasOwnProperty
条件将 return false 你不会 "do stuff" 用它。
for..in 语法迭代对象的每个 属性,包括在原型链 (如果它们是可枚举的) 上找到的对象。这通常不是您想要的,因此通常建议进行 hasOwnProperty
检查。
在你的情况下没有必要,因为你的普通对象没有从对象原型(它的原型链中唯一的东西)继承任何可枚举的属性
此外,for..in 会为您提供对象的 属性 names(键),如果您对特定 属性,你必须使用括号表示法,将你的示例扩展为:
var a = {date : 12};
for(var t in a){
alert(a[t]);
}
我想最好的理解方式是通过示例:
Object.prototype.aBaseProperty = 123;
var childObject = { date: 12 };
for (var property in childObject) {
console.log(property)
}
// output: date aBaseProperty
for (var property in childObject) {
if (childObject.hasOwnProperty(property)) {
console.log(property)
}
}
// output: date
此外,与其进行 hasOwnProperty
检查,您可能更喜欢
Object.keys(object).forEach(function(value, key) { ... });
其中 Object.keys
只会 return 拥有房产。