Js高阶-Object
一、对象的声明
- 字面量声明: var obj = {name: “aaa”}
- 构造函数声明: var obj = new Object();
二、定义属性
- obj.name = “aaa”
- obj[name] = ''aaaa"
三、对象的遍历和修改
3.1 遍历
for…in… 可以检测到原型上的数据
3.2 修改
3.2.1 删除
deleta obj[key];
冻结对象,防止对象被修改 Object.freeze(obj);
3.2.2 查找
in 可以检测到原型上的数据 key in obj 返回为true
obj.hasOwnProperty(“key”); 检测不到原型上的数据
四、属性分类
属性的类型分两种: 一种是数据属性, 一个是访问器属性。数据属性用来储存一个值, 访问器属性不包含值, 而是定义了一个get和set函数。
var obj = {
_myname: 'clw',
get name(){
console.log('get方法被调用了');
return this._myname + '1111';
},
set name(value){ //set里的value是必填的
console.log('set方法被调用了');
this._myname = value;
}
};
console.log(obj.name);
五、属性特征
5.1 通用特征
- enumerable 是否可以遍历
- writable 是否可以写
- configurable 该属性时候可以配置
默认值都为false
5.2 特征的修改
修改单个属性特征
Object.defineProperty(obj, "name", {
// value 和访问器属性是不可共存的
// value: "huohua",
set: function (val) {
console.log("set");
this._name = val
},
get: function () {
console.log("get");
return this._name
},
// writable和访问器属性不可共存
// writable: false, // 是否可写
// 是否可枚举可以和访问器属性共存
enumerable: true, //是否可枚举
configurable: true // 是否可配置 (不可配置时,则不可删除)
})
同时修改多个属性特征
Object.defineProperties(obj, {
"name": {
value: "huohua",
writable: true
},
"classNumer": {
value: 27,
enumerable: true
}
})
5.3 获取属性特征
- 获取单个属性特征
Object.getOwnPropertyDescriptor(obj, “age”)- 获取所有属性特征
Object.getOwnPropertyDescriptors(obj)