前言
JS是一门基于对象和原型的语言,所以深入JS的时候接触Object的API是避免不了的。
小工具
Object.create
比new更符合JS编程范式的创建对象方法,使用委托而不是继承
Object.assgin
浅复制,也就是说只能复制所有可枚举的属性的值过来。
Object.is
更加严谨的比较
Object.isExtensible/Object.isSealed/Object.isFreeze
是否可拓展/密封/冻结,三者程度逐渐加深
hawOwnProperty
是否含有自身属性,不会像getOwnPropertyNames会去找继承的属性
操作对象
Object.defineProperty/Object.defineProperties
设置属性描述符(configurable/enumerable/value/writable)
Object.getOwnPropertyDescriptor/Object.getOwnPropertyDescriptors
返回属性描述符(configurable/enumerable/value/writable)
Object.preventExtensions/Object.seal/Object.freeze
把对象变得不可拓展/不可拓展+不可配置/完全禁止修改
原型链相关
prototype/proto/constructor
原型属性:可以查看原型对象
原型访问器:已不推荐使用,但面试经常问到,可以简单理解为指向new的那个函数的原型
构造器:存在于原型链上,可以查看是谁创造出来的,但可以被修改所以不可信
Object.getOwnPropertyNames/Object.getOwnPropertySymbols
返回所有属性/所有symbol属性键
Object.getPrototypeOf/Object.setPrototypeOf
读/写原型
isPrototypeOf
测试一个对象是否存在于另一个对象的原型链上
propertyIsEnumerable
属性名是否可枚举
迭代相关
Object.entries/Object.keys/Object.values
返回一个迭代器对象,通常和let...of一起使用
特殊
toString/toLocalString/valueOf
返回[object xxx]/强制转换类型后的值