初始化对象
var a = {} //es5语法
var b = new Object() //es5语法
var c = Object.create(Object.prototype) //es6语法
//以上3种方法是等价的
//真正的空对象{}
var c = Object.create(null) //es6语法
获取对象属性
var a = {name:123}
a.name //123
a['name'] //123
//修改
a.name = '456'
缩写
var xxx = {
a:a,
b:b
}
// 等价于
var xxx = { a, b } //ES5
动态key
var name = 'xxx'
var object = {[name]:1}
console.log(object) // xxx:1
方法定义get set。对属性的读和写自定义操作
var b = {
_age : 18,
//读的时候访问get
get age(){ return b._age},
//写的时候访问set
set age(value){
if(value < 100){
b._age = value
}else{
b._age = 100
}
}
}
console.log(b)//{_age: 18}
b.age //18
b._age // 18
b.age = 1000 //改age的值
b.age // 读 100
ps: 以上age为动态属性
浅拷贝
var obj1 ={a:1,b:2,c:3}
var obj2 = {}
for(let key in obj1){
obj2[key] = obj1[key]
}
obj1 === obj2 //false
obj1 //{a: 1, b: 2, c: 3}
obj2 //{a: 1, b: 2, c: 3}
简写以上代码 Object.assign()
var obj1 = {a: 1, b : 2, c : 3}
//把obj1的所有key和value,复制到前面{}对象
var obj2 = Object.assign({},obj1)
obj2 // {a: 1, b: 2, c: 3}
obj1 // {a: 1, b: 2, c: 3}
obj2.a = 123
obj2 // {a: 123, b: 2, c: 3}
obj1 //{a: 1, b: 2, c: 3}
再简写 ...obj1
var obj1 = {a:1,b:2,c:3}
var obj3 = {...obj1} //超简单
变更原型
var a = {}
a.toString() //"[object Object]"
a.__proto__ === Object.prototype //true
以上代码:a的原型是Object.prototype
---------------------------------------
var b = {
sayHi(){
console.log('hi')
}
}
a = Object.create(b) //修改a的原型
a //{}
a.__proto__ === b //true
a.sayHi() // hi
获取对象的原型
var a = {}
a.__proto__ // 获取对象的原型
Object.getPrototypeOf(a) // 获取对象的原型
ps:Object.create()设置原型。Object.getPrototypeOf()获取原型
js的对象与JSON的对象的区别?
1、 JSON 只允许
"property": value
syntax形式的属性定义。属性名必须用双引号括起来。且属性定义不允许使用简便写法。
2、SON中,属性的值仅允许字符串,数字,数组,true
,false
,null
或其他(JSON)对象。
3、 JSON中,不允许将值设置为函数。
4、Date
等对象,经JSON.parse()
处理后,会变成字符串。
5、JSON.parse()
不会处理计算的属性名,会当做错误抛出