对象
① Object.create(原型指向)
-
用于创建对象,和 new Object() 的区别在于:该方法创建出来的对象的原型取决于传递的参数,而 new Object() 创建出来的对象永远指向 Object的 prototype
-
var obj1 = Object.create(null); // 创建一个纯净对象,不继承任何Object.prototype var obj2 = Object.create({name: 'zs'}); console.log(obj1); // {} console.log(obj2.__proto__); // {name: "zs"}
② Object.entries()
-
将传入的对象转换成对应的数组并将结果返回出来
-
var obj = { name: 'zs', age: 18, data: { code: 4, like: 'eat' } } var result = Object.entries(obj); console.log(result); // [["name", "zs"], ["age", 18], ["data", {code: 4, like: "eat"}]]
③ Object.getOwnPropertyNames()
-
返回对象所有的属性组成的数组
-
var obj = { name: 'zs', age: 18, data: { code: 4, like: 'eat' } } var result = Object.getOwnPropertyNames(obj); console.log(result); // ["name", "age", "data"]
④ Object.getPrototypeOf()
-
返回指定对象的原型
-
var obj1 = {}; var obj2 = Object.create(null); var result1 = Object.getPrototypeOf(obj1); var result2 = Object.getPrototypeOf(obj2); console.log(result1); // {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ …} console.log(result2); // null
⑤ Object.preventExtensions()
-
将指定对象设置为不可扩展,永远不能添加新属性,但是可以删除已有属性
-
var obj = { name: 'zs', age: 18 } Object.preventExtensions(obj); obj.code = 4; obj.age = 20 console.log(obj); // {name: "zs", age: 20} delete obj.age; console.log(obj); // {name: "zs"}
⑥ Object.isExtensible()
-
用于判断一个对象是否可扩展,也就是是否可以添加新属性
-
var obj = { name: 'zs', age: 18 } var result1 = Object.isExtensible(obj); Object.preventExtensions(obj); console.log(result1); // true var result2 = Object.isExtensible(obj); console.log(result2); // false
⑦ Object.freeze()
-
冻结对象 使对象永远不变,不可修改不可删除
-
var obj = { name: 'zs', age: 18 } Object.freeze(obj); obj.age = 20; console.log(obj); // {name: "zs", age: 18}
⑧ Object.isFrozen
-
判断一个对象是否被冻结
-
var obj = { name: 'zs', age: 18 } var result1 = Object.isFrozen(obj); console.log(result1); // false Object.freeze(obj); var result2 = Object.isFrozen(obj); console.log(result2); // true
⑨ Object.defineProperty(obj, prop, descriptor)
- 用于向对象中修改或添加一个属性
- 参数
- obj : 要定义或者修改的对象
- prop : 要添加或者修改的属性
- descriptor : 描述符,是个对象,用于描述prop
- value : 描述值
- writable : 描述属性是否可以修改,为true可以修改,false不可修改,默认为false
- enumerable : 描述属性是否可以被枚举,为true表示可以,默认为false
- configurable : 描述属性是否可以被删除,为true表示可以,默认为false
- get(){} : 当读取属性值的时候执行
- set(){} : 当属性值发生改变时执行
- 注
- 当使用了getter或setter方法,不允许使用writable和value这两个属性,可以和enumerable、configurable同时使用
- get或set不是必须成对出现,任写其一就可以。如果不设置方法,则get和set的默认值为undefined
⑩ Object.defineProperties(obj, { prop1:descriptor1, prop2:descriptor2, … })
- 用于向对象中修改或添加多个属性
⑩① Object.keys()
-
遍历可枚举的属性(返回对象所有的key组成的数组)
-
var obj = { name: 'zs', age: 18, data: { code: 4, like: 'eat' } } var result = Object.keys(obj); console.log(result); // ["name", "age", "data"]
⑩② Object.values()
-
遍历可枚举的属性值(返回对象所有的value组成的数组)
-
var obj = { name: 'zs', age: 18, data: { code: 4, like: 'eat' } } var result = Object.values(obj); console.log(result); // ["zs", 18, {code: 4, like: "eat"}]
⑩③ Object.assign(target, source1, source2, …)
- 用于对象的合并
- 参数
- target : 目标对象(即:返回的合并后的对象)
- source1: 源对象1
- source2: 源对象2
⑩④ Object.hasOwnProperty()
-
判断对象是否拥有某个属性
-
var obj = { name: 'zs', age: 18, data: { code: 4, like: 'eat' } } var result = obj.hasOwnProperty('age'); console.log(result); // true