文章如有错误请联系我 anmingzhe@me.com
Object.assign() ?合并对象
多个参数,除第一个参数的所有参数合并在第一个参数上
let obj = {a: 1} ? ??
let copy = Object.assign({}, obj) ??
copy ?// {a: 1}
obj.a = 2
copy.a // 1
copy.a = 3
obj.a // 2
得出结论,两个对象的指针不是同一个。但是 只限于 一层对象,如果对象是{a: {b:1}}那么就出问题了,她们的引用指针就成一个了,不是两个独立的对象了,? 建议拷贝对象的话,用JSON.parse(JSON.stringify(Object))这种方式进行?
let o1 = {a: 1}
let o2 = {b: 2}
let o3 = {b: 3}
let obj = Object.assign(o1, o2, o3)
obj // {a: 1, b: 2, c: 3}
o1 // {a: 1, b: 2, c: 3} ?
得出结论 吧o2 ?o3合并在o1 上面?
obj.a = 10
o1.a // 10?
得出结论? 吧o2? o3合并在o1 上面 并赋值给obj 所以 o1和obj共用一个引用指针。
Object.create() ?创建对象 和 继承对象
let a = {} ? ?a.__proto__ ?// 出来一大堆对象自带的方法和属性
let b = Object.create(null)? 创建一个以null为原型 的对象? b.__proto__ // undefined ?很干净
一般当你不想继承任何Object.prototype,想要得到一个纯净对象时可以用Object.create(null)
function A() {}?
A.prototype.aaa = function(){console.log(111)}
function B() {}
B.prototype = Object.create(A.prototype) ? // 继承,B 继承了 A
let b = new B()
b.aaa() ?// 111
object.defineProperties() 在对象添加或修改属性并返回改对象
Obj.defineProperty() 添加或修改对象上某个属性,并返回此对象
Object.entries() 将对象转化为数组
let obj = {name:'amz',age:23}
console.log( Object,entres(obj) )? //? [ ['name','amz'], ['age', 23] ]
目前就火狐和谷歌实现,别的浏览器都不兼容
Object.getOwnPropertyDescriptor() 返回对象上一个自有属性的属性描述符(特性)就是可不可以修改 可以不可以枚举那些东东?
let obj = {a: 2}
let d = Object.getOwnPropertyDescriptor(obj, 'a')
d // {value: 2, writable: true, enumerable: true, configurable: true}
Object.getOwnPropertyDescriptors() 获取对象所有自身属性的描述符(特性)
var obj = {a: 1,b: 2}
var o = Object.getOwnPropertyDescriptors(obj)
o //{{value: 1, writable: true, enumerable: true, configurable: true},{value: 2, writable: true, enumerable: true, configurable: true}}
Object.getOwnPropertyNames() 返回由对象所有的自身属性名组成的数组
var obj = {a: 1}
obj.b = 2
Object.getOwnpropertyNames(obj) ?// ['a','b']
Object.getPrototypeOf() 返回指定对象的原型
let proto = {}
let obj = Object.create(proto)
Object.getprototypeOf(obj) === proto
Object.is()? 传2参 判断2参是否相等 于 === 区别在于 is会让NaN和NaN相等 +0 -0 不想等,=== 是+0 -0 相等,NaN和NaN不想等
Object.preventExtensions() 让一个对象不可扩展,永远不能添加新属性 但是可以删除已有属性
Object.isExtensble()判断一个对象是否可扩展,也就是可以添加新属性不?
var obj = {}? ? Object.isExtensble(obj) //true ? 可以添加新属性
Object.freeze() 冻结对象 改对象永远不变,不可修改不可删除
var obj = {a: 2}
Object.freeze(obj)
obj.a = 10
console.log(obj.a) // 2 ? 不可以修改的
Object.isFrozen() 判断一个对象是否被冻结
let obj = {} ? Object.isFrozen(obj) ?//false ? 未冻结
Object.seal()可以密封一个对象,密封是指不能添加和删除属性,不能需改属性的可枚举可写可读的配置,但可以修改已有属性的指
Object.isSealed() ?判断一个对象是否被密封 是密封则返true?
Object.keys() 返回由对象键组成的一个数组 如果传入值不是对象 则会强制转为对象(在es5之前会报错,es2015开始才强制转化为对象)
Object.keys('amz') // ['0','1','2']
Object.keys('[1,2,3]') //['0','1','2']
let obj = {a:'aa',m:'mm',z:'zz'} ?Object.keys(obj) // ['a','m','z']
Object.prototype.hasOwnProperty() 判断属性是否存在(自有非继承属性)
let o = {a: 1} ?o.hasOwnProperty('a') // true ? ?o.hasOwnProperty('toString') //false
Object.prototype.isprototypeOf() 判断一个对象是否在另一个对象的原型上
let a = {amz: 1} ? ? ?let b = Object.create(a) ? ? a.isPrototypeOf(b) //true
Object.prototype.propertyIsEnumerbale()判断一个真身属性在当前对象是否可枚举
let o = {a: 1} ??
o.propertyIsEnumerable('a') //true
Object.defineProperties(o, {b:{value:2,enumerbale:false}}) ?
o.propertyIsEnumerbale('b') //false
Object.prototype.toLocaleString()方法返回一个该对象的字符串表示 (http://08643.cn/p/9f442f0c43b4)这里有详细讲
let o = {a: 1}? o.toLocaleString() ? //"[object Object]"
Object.prototype.toString() ?返回对象的字符串表示
let o = {a: 1}? o.toString()? //"[object Object]"