前言
JS是一門基于對象和原型的語言斑鼻,所以深入JS的時候接觸Object的API是避免不了的凤壁。
小工具
Object.create
比new更符合JS編程范式的創(chuàng)建對象方法萌壳,使用委托而不是繼承
Object.assgin
淺復(fù)制荷科,也就是說只能復(fù)制所有可枚舉的屬性的值過來笔链。
Object.is
更加嚴(yán)謹(jǐn)?shù)谋容^
Object.isExtensible/Object.isSealed/Object.isFreeze
是否可拓展/密封/凍結(jié)舰蟆,三者程度逐漸加深
hawOwnProperty
是否含有自身屬性趣惠,不會像getOwnPropertyNames會去找繼承的屬性
操作對象
Object.defineProperty/Object.defineProperties
設(shè)置屬性描述符(configurable/enumerable/value/writable)
Object.getOwnPropertyDescriptor/Object.getOwnPropertyDescriptors
返回屬性描述符(configurable/enumerable/value/writable)
Object.preventExtensions/Object.seal/Object.freeze
把對象變得不可拓展/不可拓展+不可配置/完全禁止修改
原型鏈相關(guān)
prototype/proto/constructor
原型屬性:可以查看原型對象
原型訪問器:已不推薦使用,但面試經(jīng)常問到身害,可以簡單理解為指向new的那個函數(shù)的原型
構(gòu)造器:存在于原型鏈上味悄,可以查看是誰創(chuàng)造出來的塌鸯,但可以被修改所以不可信
Object.getOwnPropertyNames/Object.getOwnPropertySymbols
返回所有屬性/所有symbol屬性鍵
Object.getPrototypeOf/Object.setPrototypeOf
讀/寫原型
isPrototypeOf
測試一個對象是否存在于另一個對象的原型鏈上
propertyIsEnumerable
屬性名是否可枚舉
迭代相關(guān)
Object.entries/Object.keys/Object.values
返回一個迭代器對象,通常和let...of一起使用
特殊
toString/toLocalString/valueOf
返回[object xxx]/強(qiáng)制轉(zhuǎn)換類型后的值