JavaScript 从对象检索属性
示例
性能特点:
可以从对象检索的属性可能具有以下特征,
可数
不可数
拥有
在使用创建属性时,我们可以设置其特征(“own”除外)。在对象的直接级别而非原型级别()可用的属性称为自己的属性。Object.defineProperty(ies)__proto__
并且不使用而添加到对象中的属性将没有其可枚举的特性。那意味着它被认为是真实的。Object.defindProperty(ies)
可枚举的目的:
设置属性的可枚举特征的主要目的是通过使用不同的编程方法,在从其对象检索特定属性时,使该特定属性具有可用性。这些不同的方法将在下面进行深入讨论。
检索属性的方法:
可以通过以下方法检索对象的属性:
for..in循环
该循环在从对象中检索可枚举的属性时非常有用。另外,此循环将检索可枚举的自身属性,并且将遍历原型链直到将原型视为空,从而执行相同的检索。
//示例1:简单数据
varx={a:10,b:3},props=[];
for(propinx){
props.push(prop);
}
console.log(props);//["a","b"]
//示例2:原型链中具有无数属性的数据
varx={a:10,__proto__:{b:10}},props=[];
for(propinx){
props.push(prop);
}
console.log(props);//["a","b"]
//例3:具有不可枚举属性的数据
varx={a:10},props=[];
Object.defineProperty(x,"b",{value:5,enumerable:false});
for(propinx){
props.push(prop);
}
console.log(props);//["a"]
Object.keys()功能
该功能是EcmaScript5的一部分。该功能用于从对象检索可枚举的自身属性。在其发布之前,人们习惯于通过组合for..in循环和函数来从对象检索自己的属性。Object.prototype.hasOwnProperty()
//示例1:简单数据
varx={a:10,b:3},props;
props=Object.keys(x);
console.log(props);//["a","b"]
//示例2:原型链中具有无数属性的数据
varx={a:10,__proto__:{b:10}},props;
props=Object.keys(x);
console.log(props);//["a"]
//例3:具有不可枚举属性的数据
varx={a:10},props;
Object.defineProperty(x,"b",{value:5,enumerable:false});
props=Object.keys(x);
console.log(props);//["a"]
Object.getOwnProperties()功能
此函数将从对象中检索可枚举和不可枚举的自身属性。它也作为EcmaScript5的一部分发布。
//示例1:简单数据
varx={a:10,b:3},props;
props=Object.getOwnPropertyNames(x);
console.log(props);//["a","b"]
//示例2:原型链中具有无数属性的数据
varx={a:10,__proto__:{b:10}},props;
props=Object.getOwnPropertyNames(x);
console.log(props);//["a"]
//例3:具有不可枚举属性的数据
varx={a:10},props;
Object.defineProperty(x,"b",{value:5,enumerable:false});
props=Object.getOwnPropertyNames(x);
console.log(props);//["a","b"]
杂项:
下面给出了一种从对象中检索所有(拥有的,可枚举的,不可枚举的,所有原型级别的)属性的技术,
function getAllProperties(obj, props = []){ return obj == null ? props : getAllProperties(Object.getPrototypeOf(obj), props.concat(Object.getOwnPropertyNames(obj))); } var x = {a:10, __proto__ : { b : 5, c : 15 }}; //向第一级原型添加不可枚举的属性 Object.defineProperty(x.__proto__, "d", {value : 20, enumerable : false}); console.log(getAllProperties(x)); ["a", "b", "c", "d", "...other default core props..."]
支持EcmaScript5的浏览器将支持此功能。