一、对象的定义
1、var object1={};(对象字面量)
object1 = {
'x': 1,
"y": 2,
username: 'king',
'for': 'Javascript关键字必须放到引号之间',
'first-name': 'queen',
married: true,
test: null,
test1: undefined,
salary: 12.3,
person: {
username: 'king',
age: 12,
addr: '北京'
}
};
2、过new Object()创建对象
var obj = new Object(); //创建一个空对象,{}
var arr = new Array(); //空数组,[]
var date = new Date(); //日期时间对象
var reg = new RegExp('js'); //创建正则对象
3、通过构造函数创建
function Test(num1, num2) {
this.n1 = num1;
this.n2 = num2;
}
var obj5 = new Test(5, 6);
4、通过Object.create()创建对象
var obj = Object.create({
x: 1
});
//创建一个普通的空对象
var obj = Object.create(Object.prototype);
二、对象的基本操作
var object1 = {
'x': 1,
"y": 2,
username: 'king',
'for': 'Javascript关键字必须放到引号之间',
'first-name': 'queen',
married: true,
test: null,
test1: undefined,
salary: 12.3,
person: {
username: 'king',
age: 12,
addr: '北京'
},
info=function(){
return this.person.username+"地址:"+this.person.addr;//king地址:北京
}
};
访问属性:object1.username; //king
//或者
object1['married']; //true
修改属性:object1.username=‘King1’; //King1
删除属性:delete obj.username;
添加属性:object1.other='other'
三、对象的特性
var obj={
x:1,
y:2,
z:3,
username:'king',
age:12,
addr:'北京'
};
console.log('x' in obj);//是否包含x属性
console.log(obj.hasOwnProperty('x'));//是否包含x属性
console.log(obj.propertyIsEnumerable('x'));//x属性是对象自己的并且是可枚举的返回true
//获取所有属性(包括继承的属性)
for(var p in obj){
console.log(p);
}
//返回所有自有属性的名称
console.log(Object.getOwnPropertyNames(obj));
console.log(Object.keys(obj));
//定义(修改)属性的特性
Object.defineProperty(obj,'y',{
value:56,//设置值
writable:true,//代表是否可写(默认false)
enumerable:true,//是否可枚举(默认false)
configurable:false//是否可配置(默认false)
});
属性特性与属性操作的对应关系:
实例:
var obj1={
__proto__:null,//没有继承而来的属性
value:1
};
//创建一个属性
Object.defineProperty(obj1,'x',{
value:1,
writable:false,
enumerable:false,
configurable:true
});
obj1.x=2;
console.log(obj1.x);//1
Object.defineProperty(obj1,'x',{
value:3,
writable:true
});
console.log(obj1.x);//3
obj1.x=5;
console.log(obj1.x);//5
//如果属性不可配置,但是可以把writable的true变成false,但不能将false变为true
Object.defineProperty(obj1,'y',{
value:1,
writable:true,
enumerable:false,
configurable:false
});
obj1.y=6;//6
console.log(obj1.y);
Object.defineProperty(obj1,'y',{
writable:false
});
obj1.y=10;
console.log(obj1.y);//6
//获取对象的特性描述信息
console.log(Object.getOwnPropertyDescriptor(obj1,'y'));
/*{
value:1,
writable:true,
enumerable:false,
configurable:false
}*/
var newObj={x:1};
var NewObj1=Object.create(newObj);
console.log(NewObj1.isPrototypeOf(newObj));//true
console.log(Object.prototype.isPrototypeOf(newObj));//true
//同时设置多个属性
var person={};
Object.defineProperties(person,{
'username':{
value:'king',
writable:true,
enumerable:true,
configurable:true
},
age:{
value:12,
writable:false
}
});
//检测一个对象是否是另外一个对象的原型(或者处于原型链中)
var obj={x:1};
var obj1=Object.create(obj);
console.log(obj.isPrototypeOf(obj1));
console.log(Object.prototype.isPrototypeOf(obj1));
Object.isExtensible(obj);//对象是否可扩展
Object.seal(obj);//将对象设为不可扩展(即将对象设置为不可扩展,同时将对象的所有自有属性都设置为不可配置)
Object.freeze(obj);//阻止修改现有属性的特性和值,并阻止添加新属性。