zoukankan      html  css  js  c++  java
  • JavaScirpt对象原生方法

    Object.assign()

    Object.assign()方法用于合并对象,只会合并可枚举的属性

    const obj1= {a: 1}
    const obj2 = Object.assign({}, obj1) // 将一个空对象和obj1合并在一起,相当于你复制对象
    obj1.a = 2
    console.log(obj2.a) // 1  两个对象是独立的。
    const obj3 = {a: {b: 1}}
    const obj4 = Object.assign({}, obj3) // 将obj3和一个空对象合并在一起
    obj3.a.b = 2
    console.log(obj.4.a.b) // 2  两个对象又不是独立的了,,合并的对象属性里面如果还是对象,那么合并后就会存在这种情况。
    const a = {a: 1} const b = {b: 2}
    const c = Object.assgin(a, b, {c: 3})
    console.log(c) // {a: 1, b: 2, c: 3}

    如果合并的对象 都有某一个相同的属性名,则后面的覆盖掉前面的对象。

    Object.create()

    Object.create() 方法使指定的原型对象和属性去创建一个新对象

    const aa = Object.create(null)  
    console.log(aa) // {}   以null为原型创建了一个对象,这个对象非常的干净,不继承任何东西
    const bb = Object.create(Array.prototype)
    bb 这个对象 将会拥有数组有的所有方法,因为是以数组的prototype为原型创建的对象。

    Object.defineProperties()

    Object.defineProperties()方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象

    const obj = {a: 1, b: 2}
    Object.defineProperties(obj, {
        a: {value: ''hello, writable: false}, 
        c: {value: true, writable: true},
        d: {value: 'hello', writable: false}
    })
    // 上面value 是属性的值,writable属性是 是否可以修改属性值
    console.log(obj) // {a: 'hello', b: 2, c: true, d: 'hello'}
    obj.c = 3
    console.log(c) // 3
    obj.a = 4
    console.log(a) // 'hello'

    Object.defineProperty()

    Object.defineProperty() 方法会直接在对象上定义一个新属性,或修改现有的属性,并返回这个对象

    const obj = {a: 1}
    Object.defineProperty(obj, 'a', {
        enumerable: false,
        configurable: false,
        writable: false,
        value: 'hello wrod'
    })
    console.log(obj) // {a: 'hello wrod'}

    enumerbale是否在对象的枚举属性中 默认false

    configurable 是否可修改或删除属性特性(属性特性就是这一堆值为false或则会true的东西),默认false

    wrtable 是否可以修改属性的值 默认为false

    如果你在对象中未使用 Object.defineProperty(), Object.defineProperties()或Objecr.create()函数的情况下添加对象属性,则enumerbale,configurable,wrtable 默认都是true

    Object.entries()

    Object.entries()方法你可以简单的理解为把对象可枚举的属性和值变成数组,

    const obj = {foo: 'bar', too: 22}
    console.log(Object.entries(obj)) // [['foo', 'bar'], ['too', 22]]

    Object.getOwnpropertyDescriptor()

    Object.getOwnpropertyDescriptor()返回一个对象上的一个属性的 描述符,就是是否可枚举是否可修改等等,

    const obj = {a: 2}
    const b = Object.getOwnpropertyDescriptor(obj, 'a')
    console.log(b) //{value: 2, writable: true, enumerable: true, configurable: true}

    Object.getOwnPropertyDescriptors()

    Object.getOwnPropertyDescriptors()返回对象所有属性的描述符

    const obj = {a: 1, b: 2}
    const o = Object.getOwnPropertyDescriptors(obj)
    console.log(o) 
    // {{value: 1, writable: true, enumerable: true, configurable: true},
    {value: 2, writable: true, enumerable: true, configurable: true}}

    Object.getOwnpropertyNames()

    Object.getOwnpropertyNames()返回对象自身所有的属性名组成的对象

    const obj = {a: 1, b: 2, c: 3, d: 4}
    const o = Object.getOwnpropertyNames(obj)
    console.log(o) // ['a', 'b', 'c', 'b']

    Object.getPrototypeOf()返回指定对象的原型

    const proto = {}
    const obj = Object.create(proto)
    console.log(Object.getPrototypeOf(obj) === proto) // true

    Object.is()

    Object.is()方法传递两个参数,判断两个参数是否相等。  

    Object.is()和 === 的区别是Object.is() 会让NaN和NaN相等+0和-0不相等。

    ===是+0和-0相等,NaN 和NaN 不想等。

    console.log(Object.is(+0, -0)) // false

    +0 === -0

    Object.preventExtensions()

    Object.preventExtensions()让一个对象不可扩展(就是不让添加新属性),并返回原对象,永远不能添加新属性,但可以删除已有的属性

    const o ={}
    Object.preventExtensions(o)

    Object.isExtensble()

    Object.isExtensble()方便判断一个对象是否可扩展

    const obj = {}
    Object.isExtensble(obj) // true  可以添加新属性

    Object.freeze()

    Object.freeze()方法 用于冻结对象,被冻结的对象,不可以添加新属性,不可以删除原有属性,也不可以修改原有属性,该对象永远不变。

    const obj = {a: 2}
    Object.freeze(obj)
    obj.a = 3
    console.log(a) // 2 不可以修改

    Object.isFrozen()

    Object.isFrozen() 判断一个对象是否被冻结
    const obj = {}
    Object.isFrozen(obj) // false  未冻结

    Object.seal()

    Object.seal()方法用于密封一个对象,密封只是不可以添加和删除对象的属性,不可以修改属性的可枚举可写可读配置,但是可以修改对象的已有属性的值

    Object.isSealed()

    Object.isSealed()放啊判断一个对象是否被密封,是的话返回true  否 返回false

    Object.keys()

    Object.keys()方法由对象的键 组成的一个数组,如果传入的值不是对象,则会转化为对象。

    Object.keys('abc') // ['0', '1', '2']  'abc'是一个字符串,转化为对象以后 他的键就是他的索引咯 所以 输出了['0', '1', '2'] 
    Object.keys([1, 2, 3]) // ['0', '1', '2']   数组的元素的键就是数组元素的索引
    Object.keys({a: 'aa', b: 'bb'}) // ['a', 'b']

    Object.prototype.hasOwnProperty()

    hasOwnProperty()方法用于判断对象里面是否有某属性,只判断自带的属性。

    const  o = {a: 1}  
    o.hasOwnProperty('a') // true   
    o.hasOwnProperty('toString') //false

    Object.prototype.hasOwnProperty()

    hasOwnProperty()方法用于判断对象里面是否有某属性,只判断自带的属性。

    const  o = {a: 1}  
    o.hasOwnProperty('a') // true   
    o.hasOwnProperty('toString') //false

    Object.prototype.isPrototypeOf()

    isPrototypeOf()方法用于判断一个对象是否在另一个对象的原型上。

    const a = {amz: 1}      
    const b = Object.create(a)     
    a.isPrototypeOf(b) //true

    Object.prototype.propertyIsEnumerable()

    propertyIsEnumerable()方法判断一个对象的自身属性在当前对象是否可枚举

    const o = {a: 1}
    o.propertyIsEnumerable('a') //true
    Object.defineProperties(o, {b:{value:2,enumerbale:false}})
    o.propertyIsEnumerbale('b') //false

    Object.prototype.toString()

    toString()方法返回一个对象的字符串表示

    const  o = {a: 1}  o.toString()   //"[object Object]"

    Object.prototype.toLocaleString()

    toLocaleString()方法返回一个对象的字符串表示

    const  o = {a: 1}  o.toLocaleString()   //"[object Object]"

    toLocaleString() 方法在日期字符串对象数字数组都有,但是它们是有区别的。

  • 相关阅读:
    c++中单引号和双引号的区别
    C++ 数组
    C++ 输出到文本文件
    C++中文本的读入
    C++ 输入和输出
    C++构造函数和文件组织
    Linux中使用gcc编译文件
    linux下修改gcc编译器版本
    Git--创建与合并分支
    'webpack' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 原文地址:https://www.cnblogs.com/tuspring/p/9706721.html
Copyright © 2011-2022 走看看