前言
JavaScript中的对象是可变的键控集合,除了简单类型外,其他的值都是对象。数组是对象,函数是对象,正则表达式是对象,对象也可以是对象。对象是属性的容器,每个属性都有key和value,key的值可以是包括空字符串在内的任意字符串,value的值是除undefined之外的任何值。
对象字面量
- 对象字面量是不通过*new()*方法创建对象
- js标准创建对象的方法通常是
var obj = new Object(),而使用这种方法创建对象实际上是方法的调用,既然是方法的调用必然会涉及到原型链中的遍历,使得创建对象的时间更长。 - 字面量则通过
var obj = {}创建,更加简便易读运行快。两种创建对象方法的区别
对象字面量创建只能添加静态的属性和方法,通过new函数创建对象则可以通过prototype属性添加共用的属性和方法
- js标准创建对象的方法通常是
- 对象字面量的创建规则
- 若属性名即
key是合法的JavaScript标识符且不是保留字,可以不用引号括起来 - 属性之间用逗号隔开,但最后一个属性后不要逗号,不然某些浏览器会报错
- 对象是可嵌套的,属性的值即
value可以是其他对象
- 若属性名即
检索
- 通过
obj['属性名']和obj.属性名来获取对象中属性的值:obj.属性名只能在属性名是合法的JavaScript标识符且不是保留字的情况下使用 - 当检索的属性值不存在时,返回undefined
var obj = {
name: 'Jack',
age: 18
}
var obj2 = {
name: 'Joe'
}
console.log(obj['name']) // 'Jack'
console.log(obj.name) // 'Jack'
console.log(obj2.age) // undefind
更新
- 通过赋值语句更新属性值
- 若属性存在则替换其中的值
- 若属性不存在则在该对象中添加该属性
var obj={
name: 'Jack'
}
obj.name = 'Joe'
obj.age = 18
console.log(obj) // { name: 'Joe', age: 18}
引用
JavaScript中,基本数据类型的名和值都存放在栈内存中,引用类型的名存放在栈内存中,值存放在堆内存中,同时在栈内存中存在一个指向堆内存中值的指针,当对基本数据进行赋值,会在栈内存中创建新的名和值,而对引用类型进行赋值则在栈内存中创建新的名,同时将获得一个指向同一块内存的指针。
- 在JavaScript中,基本类型赋值只是值的传递,它们的地址并不会传递
- 引用类型的数据如对象、数组等,赋值操作会将地址传递给另一个对象
var a = 2
var b = a
b = 1
console.log(a) // 2
console.log(b) // 1
var obj1 = {
name: 'Jack',
age: 18
}
var obj2 = obj1
obj2.name = 'Joe'
console.log(obj2.name) // Joe
console.log(obj1.name) // Joe