文章如有错误请联系我 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://www.jianshu.com/p/9f442f0c43b4)这里有详细讲
let o = {a: 1} o.toLocaleString() //"[object Object]"
Object.prototype.toString() 返回对象的字符串表示
let o = {a: 1} o.toString() //"[object Object]"