美文网首页
JS对象用法大全

JS对象用法大全

作者: 安明哲 | 来源:发表于2017-04-12 10:44 被阅读0次

    文章如有错误请联系我 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]"

    相关文章

      网友评论

          本文标题:JS对象用法大全

          本文链接:https://www.haomeiwen.com/subject/vyydattx.html