ECMA-262对象的定义:无序属性的集合,其属性可以包含基本值,对象,或者函数。可以将对象想象成散列表:键值对,其中值可以是数据或者函数。ECMAScript中的对象其实就是一组数据(属性)和功能(方法)的集合。
1.定义对象
1)使用构造函数创建,new Object()
var person = new Object();
person.name = "briup";
person.age = 22;
2)使用对象字面量表示法
不同的属性之间用','分割,属性名和属性值之间用':'分割
var person = {
name : "briup",
age : 22
};
2.访问对象中的属性:
点访问符 .
o.name => 'terry'
o.age => 12
[ ]访问符
o['name'] => 'terry'
o['age'] => 12
3.删除对象属性
delete 对象.属性
4.给对象添加属性
o.gender = '男'
5.Object根构造函数
所有的对象都直接或间接继承Object,都能调用Object原型里面的方法
var o=new Object()
6. 检测属性
in 检测某属性是否是某对象的自有属性或者是继承属性
Object.prototype.hasOwnProperty()检测给定的属性是否是对象的自有属性,对于继承属性将返回false
Object.prototype.propertyIsEnumerable() 检测给定的属性是否是该对象的自有属性,并且该属性是可枚举的。通常由JS代码创建的属性都是可枚举的,但是可以使用特殊的方法改变可枚举性。
例如:
var o = {
x:1
}
o.hasOwnProperty("x"); //true,x 为o的自有属性
o.hasOwnProperty("y"); //false,o 中不存在属性y
o.hasOwnProperty("toString"); //false,toString为继承属性
o.propertyIsEnumerable(“toString”); //false,不可枚举
7.引用传递和值传递
基本数据类型使用值传递:基本数据类型将值直接保存到内存的栈区中
引用数据类型使用引用传递:引用数据类型的引用地址保存在栈区中,实际的值保存在堆区中,该引用地址指向堆区中的空间
var o={name:'tom',age:12}
var o1=o
o1.name='terry'
o.name => terry
8.对象的序列化
1)常规转换
obj.toString()
2)转化为JSDN字符串
console.log(JSON.stringify(obj))
3)查询字符串
name=tom&age=12
var qs=require('querystring') //引入nodejs模块
qs.stringify(obj) => name=tom&age=12