理解對(duì)象
1荷腊、定義屬性(兩種)
var person = {
name : "aaa"
};
var person = new Object();
person.name = "aaa";
2、屬性探測(cè)(兩種)
用 in 操作符 和 hasOwnProperty
var person1 = {
name : "anqi"
};
var person2 = new Object();
person2.name = "aaa";
person1.age = "24";
person2.age = "24";
person1.name = "bbb";
person2.name = "ccc";
if(person1.age){
}
// 用 in 操作符可以查找是否存在對(duì)應(yīng)的屬性
console.log("name" in person1);
console.log("age" in person1);
console.log("title" in person1);
// 用hasOwnProperty方法查找是否有其他屬性
console.log(person1.hasOwnProperty("toString"));
3急凰、刪除屬性(delete)
<script>
var person1 = {
name:"anqi"
};
console.log("name" in person1); // true
delete person1.name;
console.log("name" in person1); // false
console.log(person1.name); // undefined
</script>
4、屬性枚舉(遍歷 / 兩種) propertyIsEnumerable()
<script>
var Anqi={
name:"Anqi",
age :24,
sex:"male"
};
// for(key in Anqi){
// console.log(Anqi[key]);
// }
var keys = Object.keys(Anqi);
//keys =[name,age,sex];
for(key in keys){
console.log(keys[key]);
console.log(Anqi[keys[key]]);
}
</script>
<script>
var property = Object.keys(Object);
var i,len;
for(i=0,len = property.length;i<len;i++){
console.log("Name:"+ property[i]);
console.log("Value:"+ Object[property[i]]);
}
console.log("length" in property);
console.log(property.propertyIsEnumerable("length"));
// 用 propertyIsEnumerable() 方法檢查一個(gè)屬性是否為可枚舉的
//聲明的所有屬性默認(rèn)都是可枚舉、可配置的抡锈。
</script>
propertyIsEnumerable() 方法檢查一個(gè)屬性是否為可枚舉的疾忍。
<script>
var obj = {
name:"chengchao"
};
var keys = Object.keys(obj);
console.log(keys.propertyIsEnumerable("length"))
</script>
5、屬性類型(get / set)
<script>
var person = {
_name:"Anqi",
get name(){
console.log("Reading");
return this._name;
},
set name(value){
console.log("Setting %s",value);
this._name = value;
}
};
// console.log(person.name);
person.name = "Greg";
console.log(person.name);
</script>
6床三、屬性的特征(enumerable【可枚舉】 / configurable【可配置】)
<script>
var Anqi = {
name:"Anqi"
};
Object.defineProperty(Anqi,"name",{
enumerable:false
});
Object.defineProperty(Anqi,"name",{
//不可配置的屬性,不能用delete刪除
configurable:true
});
delete Anqi.name;
console.log("name" in Anqi)
</script>
7一罩、數(shù)據(jù)的屬性特征(writable【可改寫的】)
<script>
var person = {};
Object.defineProperty(person,"name",{
value:"anqi",
// enumerable:true,
// configurable:true,
// writable:true
});
console.log(person.name);
console.log("name" in person);
console.log(person.propertyIsEnumerable("name"));
delete person.name;
console.log("name" in person);
person.name = "Greg";
console.log(person.name);
</script>
8、訪問(wèn)器的屬性特征
把可配置撇簿,看枚舉的改為不可配置聂渊,不可枚舉的。
<script>
var Anqi = {
_name :"Anqi"
};
Object.defineProperty(Anqi,"name",{
get:function(){
return this._name;
}
});
Anqi.name="chengchao";
console.log(Anqi.name)
</script>
8四瘫、定義多重屬性(defineProperties)
<script>
var Anqi = {};
Object.defineProperties(Anqi,{
_name:{
value:"luoanqi",
enumerable:true,
configurable:true,
writable:true
},
name:{
get:function(){
return this._name;
},
set:function(value){
this._name = value;
},
enumerable:true,
configurable:true
}
});
Anqi.name="chengchao";
console.log(Anqi.name)
</script>
9.獲取屬性特征(getOwnPropertyDescriptor)
<script>
var Anqi = {
name:"Anqi"
};
var mm = Object.getOwnPropertyDescriptor(Anqi,"name");
console.log(mm.enumerable); // true
console.log(mm.configurable); // true
console.log(mm.writable); // true
console.log(mm.value); // Anqi
</script>
10.禁止修改對(duì)象(三種)
①禁止擴(kuò)展(preventExtensions)
特點(diǎn):1.不能添加新屬性汉嗽。2.可以刪除屬性。3.可以修改內(nèi)容找蜜。
var Anqi = {
name : "Anqi"
};
Object.preventExtensions(Anqi);
Anqi.name="chengchao";
console.log(Anqi.name);
②對(duì)象封颖睢(seal)
特點(diǎn):1.不能添加新屬性。2.不可以刪除屬性洗做。3.可以修改內(nèi)容弓叛。
var Anqi = {
name : "Anqi"
};
Object.seal(Anqi);
Anqi.name="chengchao";
console.log(Anqi.name);
③對(duì)象凍結(jié)(freeze)
特點(diǎn):1.不能添加新屬性。2.不可以刪除屬性诚纸。3.不可以修改內(nèi)容撰筷。
var Anqi = {
name : "Anqi"
};
Object.freeze(Anqi);
Anqi.name="chengchao";
console.log(Anqi.name);