广义上来说,Array、Number、function这些都是Object。我们这里介绍的是未封装过的、大括号包络着逗号隔开的键值对、键值对由对象属性和对象值用冒号分隔而组成的对象形式。
1、定义
①var a = new Object();
②var a = new Object;
③var a = {};
2、初始化
var a = {1 : 1, '1' : '1', 'jQuery' : $('body'), 'Dom' : $('body').get(0), null : null, undefined : undefined, NaN : NaN, '' : '', ['_$'] : ['_$'], true : true, 'object' : {'function' : function() {alert('LiuYiFan');}}};
①对象属性可以为:Number、String、null、undefined、NaN、一维Array(其元素也必须满足属性支持的类型)、Boolean,它们之后将统一变为String形式来作为属性的存在
②初始化时不支持js变量传入作为对象属性,可以利用下文提到的增加对象属性中的中括号的方式来将js变量传入对象属性
③将会剔除重复的属性,本例中有着属性1和'1',虽然数据类型分别为Number和String,但是由于之后将统一转为String,这样就重复了,只会保留一个、并且是保留最后出现的属性,本例会保留'1' : '1'键值对
④一维Array只会保留它的元素作为属性
⑤对象值可以为:Number、String、jQuery对象、Dom对象、null、undefined、NaN、Array、Boolean、Object、function
⑥JSON对象是js对象的一种严格的格式,属性为String类型,值为合法的JSON数据类型,且所有String类型必须用双引号,JSON格式里不存在单引号(除了JSON字符串最外层的引号)。JSON对象通常用于与后端的数据交互
3、访问键值对
①访问值:
var value = object.keyName;
var value = object['keyName'];
(1)只有当属性名以字母、下划线或$开头时才能用点号访问值,这也是Array不能用点号访问值的原因(与js变量名命名规则对应:js变量只允许以字母、下划线、$、数字命名,且不能以数字开头)
(2)例如上例中,可通过a.object.function获得值,并且由于值为function类型,可以直接a.object.function();执行函数
(3)当属性名只含数字(允许最前面有减号)或是true、false时,中括号访问值可以不加引号,这也是Array可以直接array[index]访问值的原因
②访问键值对:
foreach循环
for(var keyNameStr in object) {console.log('key: ' + keyNameStr + '; value: '+ object[keyNameStr]);}
(1)在foreach里面,循环变量已经是属性名的String格式,故不能用点号访问值
(2)上篇博文有提到不建议用for-in遍历Array,而如果遍历了,此处keyNameStr为Array索引值的String格式
4、修改对象值
a.property = newValue;
a['property'] = newValue;
5、增加对象属性
a.newProperty = value;
a['newProperty'] = value;
其中中括号的方式,可以通过js变量来代替'newProperty',前提是变量的值满足对象属性的类型要求
6、删除对象属性
delete a.property;
delete a['property'];
(1)返回值为Boolean类型,表示删除成功与否
(2)删除后再访问a.property将返回undefined,这也是上篇博文提到的Array用delete删除后访问该索引的值为undefined的原因
7、Object转JSON字符串
JSON.stringify(a);
(1)这里前提是a的对象属性满足Object对象属性的类型要求,a的对象值满足JSON对象的对象值的类型要求,不然会报错
(2)通常用于向后端传递数据