JavaScript 从对象检索属性
示例
性能特点:
可以从对象检索的属性可能具有以下特征,
可数
不可数
拥有
在使用创建属性时,我们可以设置其特征(“ own”除外)。在对象的直接级别而非原型级别()可用的属性称为自己的属性。Object.defineProperty(ies)__proto__
并且不使用而添加到对象中的属性将没有其可枚举的特性。那意味着它被认为是真实的。Object.defindProperty(ies)
可枚举的目的:
设置属性的可枚举特征的主要目的是通过使用不同的编程方法,在从其对象检索特定属性时,使该特定属性具有可用性。这些不同的方法将在下面进行深入讨论。
检索属性的方法:
可以通过以下方法检索对象的属性:
for..in 循环
该循环在从对象中检索可枚举的属性时非常有用。另外,此循环将检索可枚举的自身属性,并且将遍历原型链直到将原型视为空,从而执行相同的检索。
//示例1:简单数据
var x = { a : 10 , b : 3} , props = [];
for(prop in x){
props.push(prop);
}
console.log(props); //["a","b"]
//示例2:原型链中具有无数属性的数据
var x = { a : 10 , __proto__ : { b : 10 }} , props = [];
for(prop in x){
props.push(prop);
}
console.log(props); //["a","b"]
//例3:具有不可枚举属性的数据
var x = { a : 10 } , props = [];
Object.defineProperty(x, "b", {value : 5, enumerable : false});
for(prop in x){
props.push(prop);
}
console.log(props); //["a"]Object.keys() 功能
该功能是EcmaScript 5的一部分。该功能用于从对象检索可枚举的自身属性。在其发布之前,人们习惯于通过组合for..in循环和函数来从对象检索自己的属性。Object.prototype.hasOwnProperty()
//示例1:简单数据
var x = { a : 10 , b : 3} , props;
props = Object.keys(x);
console.log(props); //["a","b"]
//示例2:原型链中具有无数属性的数据
var x = { a : 10 , __proto__ : { b : 10 }} , props;
props = Object.keys(x);
console.log(props); //["a"]
//例3:具有不可枚举属性的数据
var x = { a : 10 } , props;
Object.defineProperty(x, "b", {value : 5, enumerable : false});
props = Object.keys(x);
console.log(props); //["a"]
Object.getOwnProperties() 功能
此函数将从对象中检索可枚举和不可枚举的自身属性。它也作为EcmaScript 5的一部分发布。
//示例1:简单数据
var x = { a : 10 , b : 3} , props;
props = Object.getOwnPropertyNames(x);
console.log(props); //["a","b"]
//示例2:原型链中具有无数属性的数据
var x = { a : 10 , __proto__ : { b : 10 }} , props;
props = Object.getOwnPropertyNames(x);
console.log(props); //["a"]
//例3:具有不可枚举属性的数据
var x = { 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..."]
支持EcmaScript 5的浏览器将支持此功能。
以上是 JavaScript 从对象检索属性 的全部内容, 来源链接: utcz.com/z/315759.html