目录
1.定义对象
有两种方法可以定义对象
1.文字语法
var myObj={
key:value
}
2.构造形式
var myObj=new Object();
myObj.key=value;
2.对象的可计算属性名
ES6新增加的可计算属性名
var prefix='foo';
var prefix2='boo';
var myObject={
[prefix+'bar']:'hello',
[prefix2+'bar']:'world'
}
myObject.foobar;//hello
myObject.boobar;//world
3.复制对象
对象的复制分为浅复制和深复制。对于浅复制来说,新对象中的属性其实只是引用,他们和旧对象中的引用是一样的。
深复制的问题比较复杂,除了复制myObject以外还会复制anotherArray和anotherObject,但是anotherArray引用了myObject和anotherObject,所以还需要复制myObject,这样就会造成死循环
function anotherFunction(){
console.log('anotherFunction');
};
var anotherObject={
c:true
};
var anotherArray=[];
var myObject={
a:2,
b:anotherObject,//引用
c:anotherArray,//引用
d:anotherFunction
};
anotherArray.push=(anotherObject,myObject);
ES6新增浅复制方法
var newObject=Object.assign({},myObject);//第一个参数是目标对象第二个参数是源对象
4.对象属性描述符
var myObject={
a:2
}
var a=Object.getOwnPropertyDescriptor(myObject,'a');
console.log(a);
//{value: 2,
//writable: true,属性是否可以改写
//enumerable: true, 属性是佛可以枚举
//configurable: true属性是否可以配置
//}
4.1创建一个真正的常量
这个常量不可修改,不可重定义,不可以删除
var myObject={
a:2
}
Object.defineProperty(myObject,"FAVORITE_NUMBER",{
value:2,
writable:false,
configurable:false
})
4.2禁止对象添加新属性并且保留自身属性
可以使用Object.preventExtensions(..)
var myObject={
a:2
}
Object.preventExtensions(myObject);
myObject.b=3;
console.log(myObject.b);//undefined