1、创建对象
对象创建有两种方式,一是直接将一个对象值赋值给目标变量,二是使用声明
(1)var obj = {}
(2)var obj = new Object()
(3)Object.create()使用现有的对象来提供新创建的对象的__proto__。
//前面省略person对象
const me = Object.create(person);
me.name = "Matthew"; // "name" is a property set on "me", but not on "person"
me.isHuman = true; // inherited properties can be overwritten
me.printIntroduction();
// expected output: "My name is Matthew. Am I human? true"
2、添加属性:
(1)Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。
(2)Object.defineProperties() 方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
(3)直接添加。
3、对象属性删除delete;
var obj = { a: 1, b: 2}delete obj.a
如果属性值清空,则直接赋值为空就好了obj.a = ''
4、复制:
1、直接赋值 var a=b
2、Object.assign() 实现对象的浅拷贝【若对象里的属性值为引用类型,则拷贝的是地址】
3、JSON.parse(JSON.stringify(obj))深拷贝。
会主动丢弃(1)值为undefined的属性。
(2)值为Function类型的属性。
(3)值为Symbol类型。
(4)原型属性。
4、扩展运算符...
5、对象的遍历
(1)for......in,for (let x of obj)
(2)Object.key(obj)返回一个属性数组
(3)Object.values(obj)返回一个值数组
(4)Object.getOwnPropertyNames(obj) 返回一个数组,它包括自身所有属性
// 使用Array.forEach输出属性名和属性值
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
console.log(val + " -> " + obj[val]);
});
// 输出
// 0 -> a
// 1 -> b
// 2 -> c
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
console.log(val + " -> " + obj[val]);
});
// 输出
// 0 -> a
// 1 -> b
// 2 -> c
(5)Object.getOwnPropertySymbols(obj) 返回数组,包含对象自身所有属性,包括Symbol
6、冻结
Object.freeze() 方法可以冻结一个对象。冻结后不能做任何操作。