本文详细讲解JavaScript中对象的多种创建方式,包括字面量与构造函数。深入解析点号与方括号两种属性访问机制,介绍关联数组概念及for/in遍历。同时涵盖hasOwnProperty判断、属性增删操作,以及ES5标准下JSON.stringify与JSON.parse实现对象序列化的完整流程。
JavaScript对象创建与访问基础
本文简要记录JavaScript中对象的基本使用方法。
一、创建对象
//创建一个空对象
var o={};
//创建一个含有两个属性的对象,x、y
var o2={x:12,y:'12',name:'JS'};
//此对象中的author属性的值还是一个对象
var o3={x:12,author:{name:'JS',age:23,address:'china'}};
//创建一个空对象和{}一样
var o4=new Object();
//给对象增加name属性
o4.name='JS'
前文展示了两种对象创建方式:一是字面量写法,二是通过new关键字调用Object构造函数来实例化对象。
二、对象的访问
如上例所示,我们通过点号语法(对象名.属性名)为对象o4添加了name属性。访问对象属性主要有两种方式:使用点号(.)或使用方括号(对象名[属性名])。
//创建一个空对象
var o={};
//创建一个含有两个属性的对象,x、y
var o2={x:12,y:'12',name:'JS'};
//此对象中的author属性的值还是一个对象
var o3={x:12,author:{name:'JS',age:23,address:'china'}};
//创建一个空对象和{}一样
var o4=new Object();
//给对象增加name属性
o4.name='JS'
/**访问对象的属性值
*/
//1、使用点号的方式
var x=o2.x;//12
var authorOfName=o3.author.name;//JS
var name=o4.name;//JS
//2、使用数组的方式
var x2=o2['x'];//12
var authorOfName2=o3['author']['name'];//JS
var name2=o4['name'];//JS
点号访问方式直观易懂,而方括号方式在理解上稍显复杂。在JavaScript中,所有对象本质上都是关联数组。这种访问形式虽类似数组索引,但实际使用的是字符串作为索引,因此被称为关联数组。
前述访问方式均基于已知属性名的情况。若需遍历未知属性的对象,可使用for/in循环来遍历对象中的所有属性值。
//创建一个含有两个属性的对象,x、y、name
var o2={x:12,y:'12',name:'JS'};
for(p in o2) {
var property=p;
var value=o2[p];
console.log(property);
console.log(value);
}
运行上述代码后的打印结果如下:
x
12
y
12
name
JS
结果显示该对象包含三个属性,且各自的值均被成功打印输出。
若对象结构较复杂,可能需要判断特定属性是否存在。由于所有对象均继承自Object,可利用Object内置的hasOwnProperty()方法来检测对象自身是否包含某属性。该方法返回布尔值,需注意它仅检测对象自身的属性,不检查继承自原型的属性。
//创建一个含有两个属性的对象,x、y、name
var o2={x:12,y:'12',name:'JS'};
var b=o2.hasOwnProperty('name')//true
var b2=o2.hasOwnProperty('age')//false
对象属性的增删与类型判断
三、新增、删除属性
前文已演示为对象o4添加name属性的过程,其本质与属性赋值相同。此外,还可以利用关联数组的语法格式来为对象新增属性。
//创建一个含有两个属性的对象,x、y、name
var o2={x:12,y:'12',name:'JS'};
//删除name属性
delete o2.name;
var b=o2.hasOwnProperty('name')//false
//新增name属性
o2['name']='javascript';
//由于已经存在了name属性,这里是给name重新赋值
o2.name='js';
var b3=o2.hasOwnProperty('name');//true
上述代码首先删除了对象o2的name属性,随后通过关联数组语法重新添加name属性,最后使用点号语法对该属性进行了重新赋值。
对象序列化与JSON转换
四、对象和字符串之间的转化
ECMAScript5标准内置了对象与字符串相互转换的功能。目前主流浏览器均支持该标准;若环境不支持,可引入json2.js库文件以实现相关功能。
对象与字符串的相互转换过程称为对象序列化,即将对象状态转换为字符串,或将字符串还原为对象。此过程统一采用JSON(JavaScript Object Notation)作为数据交换格式。
将对象转换为字符串使用JSON.stringify()方法;将字符串转换为对象则使用JSON.parse()方法。
//定义一个对象
var o={name:'JavaScript',age:24};
//此种方式在转化为对象是报错,必须使用下面的方式
//var str="{name:'JavaScript',age:24}";
//正确的定义对象字符串
var str='{"name":"JavaScript","age":24}';
//把对象转化为字符串
var str2=JSON.stringify(o);
console.log('str2:'+str2+',类型:'+(typeof str2));//str2:{"name":"JavaScript","age":24},类型:string
//把字符串转化为对象
var o2=JSON.parse(str);
console.log('o2:'+o2+',类型:'+(typeof o2));//o2:[object Object],类型:object
上述示例完整实现了对象与字符串之间的双向转换。
以上关于JavaScript对象使用的介绍到此结束,希望能为读者提供参考,并感谢大家的支持。