可以从对象检索的属性可能具有以下特征,
可数
不可数
拥有
在使用创建属性时,我们可以设置其特征(“ 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的浏览器将支持此功能。
问题内容: 所以,我有一个 基于Java的Web项目 ,从3个独立的服务检索到的信息显示,托管在不同的服务器上,我使用 的Apache HTTP客户端 来获取通过在REST API信息 JSON ,使用 GSON库 。我将Json转换为用于显示信息的POJO。 现在,我想在项目中实现搜索功能,因此我将Solr安装在单独的服务器上,我想要的是: 为所有3个服务在solr服务器中索引JSON。 从So
我正在尝试从WordPress对象检索文章标题。 我应该做什么来检索标题?
问题内容: 假设此JSON对象: 可以像这样检索“ set2”属性: 有没有一种方法可以通过索引检索“ set2”属性?它是JSON对象的第二个属性。这是行不通的(当然): 因此,假设我要检索JSON对象的第二个属性,但我不知道它的名称-那么我该怎么做? 更新: 是的,我知道对象是无序属性的集合。但是我不认为浏览器会干扰JSON文字/字符串定义的“原始”顺序。 问题答案: JavaScript中的
问题内容: 我在这里遇到了一个令人费解的问题,在这里我使用Backbone中的集合检索了JSON对象。这是该对象的外观: 我要处理的数据是根据特定属性(例如Venue.Name或Date属性)过滤的(它们在对象中的深度不同,对于某些其他数据,其深度可能超过两个层次) 。我在Backbone集合中有以下代码来过滤并返回一个新集合,其内容已适当过滤: 这使我可以在一个属性中指定要针对任何对象深度使用的
我想使用javascript从python脚本中检索json对象我尝试过使用ajax和post的各种方法,但无法让任何东西工作。 现在我试着把它设置成这样 我的Javascript部分:我已经尝试过了 $. post('./cgi-bin/serverscript.py',{type:'add'},函数(data){console.log('POSTed:'data);}); 和 $. ajax(