理解对象
1、定义属性(两种)
var person = {
name : "aaa"
};
var person = new Object();
person.name = "aaa";
2、属性探测(两种)
用 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 操作符可以查找是否存在对应的属性
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() 方法检查一个属性是否为可枚举的
//声明的所有属性默认都是可枚举、可配置的。
</script>
propertyIsEnumerable() 方法检查一个属性是否为可枚举的。
<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、数据的属性特征(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、访问器的属性特征
把可配置,看枚举的改为不可配置,不可枚举的。
<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.禁止修改对象(三种)
①禁止扩展(preventExtensions)
特点:1.不能添加新属性。2.可以删除属性。3.可以修改内容。
var Anqi = {
name : "Anqi"
};
Object.preventExtensions(Anqi);
Anqi.name="chengchao";
console.log(Anqi.name);
②对象封印(seal)
特点:1.不能添加新属性。2.不可以删除属性。3.可以修改内容。
var Anqi = {
name : "Anqi"
};
Object.seal(Anqi);
Anqi.name="chengchao";
console.log(Anqi.name);
③对象冻结(freeze)
特点:1.不能添加新属性。2.不可以删除属性。3.不可以修改内容。
var Anqi = {
name : "Anqi"
};
Object.freeze(Anqi);
Anqi.name="chengchao";
console.log(Anqi.name);