var obj = {
id: 1,
pname: '小米',
price: 3999
};
一、遍历对象
var arr = Object.keys(obj); //遍历对象
console.log(arr); //返回一个有属性名组成的数组["id", "pname", "price"]
二、修改对象属性
1)value:设置属性的值,默认为undefined
Object.defineProperty(obj, 'pname', {
value: '华为' //修改属性
})
console.log(obj.pname); //华为
也可用来设置新属性
Object.defineProperty(obj, 'color', {
value: 'gold', //定义新属性
})
console.log(obj); //{id: 1, pname: "华为", price: 3999, color: "gold"}
2)writable:值是否可以重写,默认为false
Object.defineProperty(obj, 'id', {
writable: false //不能被修改
})
obj.id = '12';
console.log(obj.id); // 1
3)enumerable:目标属性是否可以被枚举,默认为false
Object.defineProperty(obj, 'color', {
value: 'gold', //定义新属性
enumerable: false, //不能被枚举
})
arr.forEach(function (val) {
console.log(val); //输出属性值
})
![](https://img-blog.csdnimg.cn/20210920163544802.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5a-75bi4dw==,size_20,color_FFFFFF,t_70,g_se,x_16)
4) configurable:目标属性是否可以被删除或是否可以再次修改特性,默认为false
//默认值皆为false
Object.defineProperty(obj, 'color', {
value: 'gold', //定义新属性
enumerable: false, //不能被枚举
configurable: false //不能被删除或者再次修改属性
})
obj.color='yellow';
delete obj.color;
console.log(obj); //{id: 1, pname: "华为", price: 3999, color: "gold"}
5)set和get方法
var obj = {
id: 1,
pname: '小米',
price: 3999
};
var _price = 3999;
//set可以监听数据的赋值操作 get可以监听到获取值,函数return的值是属性值
Object.defineProperty(obj, 'price', {
// value: '华为' //修改属性
configurable: true,
set: function (newVal) {
console.log('监听到price发生了改变,最新价格为:' + newVal);
_price = newVal;
},
get: function () {
return _price;
}
})
console.log(obj.price); //3999
obj.price = 1234; //监听到price发生了改变,最新价格为:1234
console.log(obj.price); //1234