Object的属性与方法

属性

constructor

一个引用值,返回 Object 的构造函数(用于创建实例对象)

const o = {}
o.constructor === Object // true

const o = new Object
o.constructor === Object // true

const a = []
a.constructor === Array // true

const a = new Array
a.constructor === Array // true

const n = new Number(3)
n.constructor === Number // true

prototype

用于查找Object原型上的属性或者给对象原型上添加属性和方法

设置方法
Object.prototype.say=function(){
      return 'hello'
    }
 console.log(Object.say());//hello
console.log(Object.prototype);

实例方法

Object.assign(target,...sources) 

参数

target

目标对象,接收源对象属性的对象,也是修改后的返回值。

sources

源对象,包含将被合并的属性。

返回值

目标对象。

Object.assign() 方法将所有可枚举Object.propertyIsEnumerable() 返回 true)和自有Object.hasOwnProperty() 返回 true)属性从一个或多个源对象复制到目标对象,返回修改后的对象。

let obj1={a:1,b:2}
    let obj2={b:3,c:4}
    let obj=Object.assign(obj1,obj2)//obj1是目标对象,接收源对象属性的对象,也是修改后的返回值。
    console.log(obj);//{a: 1, b: 3, c: 4}
    console.log(obj1);//{a: 1, b: 3, c: 4}

 合并对象:

返回值是不重复的对象,其中重复的属性会被后续参数中具有相同属性的其他对象覆盖。

Vue中的使用技巧:

由于Object.assign()有上述特性,所以我们在Vue中可以这样使用:Vue组件可能会有这样的需求:在某种情况下,需要重置Vue组件的data数据。此时,我们可以通过this.$data获取当前状态下的data,通过this.$options.data()获取组件初始状态下的data。然后只要使用Object.assign(this.$data, this.$options.data())就可以将当前状态的data重置为初始状态,非常方便。

Object.create()

用于创建一个新对象,使用现有的对象来作为新创建对象的原型(prototype)。

上面这句话是什么意思呢?

正常来说一个对象的原型还是一个对象,比如说下面的a是一个对象,当你打印这个a的时候,他的原型是一个Object,他这个对象上有一些方法跟属性.

那么Object.create()是以一个你已经有的对象,将这个对象为你的原型对象(就是原型链的上一级),在重新复制一个新的对象

这个是打印的B(就是用Object.create()创建的的对象)他的上一级是A这个对象

语法:

Object.create(proto)
Object.create(proto, propertiesObject)

参数:

proto

新创建对象的原型对象。

propertiesObject 可选

如果该参数被指定且不为 undefined,则该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。这些属性对应于 Object.defineProperties() 的第二个参数。

返回值

一个新对象,带着指定的原型对象及其属性。

作用:

我们在使用过程中经常遇到,现在有一个对象A,A里面有属性和方法,我们现在需要一个和A有同样的属性和方法外,还另外新增一些属性,此刻我们就可以创建一个对象B,然后使用var B=Object.create(A);此时B就会继承A继承所有属性和方法,然后B还可以自己创建新的属性和方法。
完整写法

let B = Object.create(A, {

      fo: {//属性
        value: '值',
        writable: true,//是否能重写
        enumerable: true,//是否可以枚举(遍历)
        configurable: true,//是否可以被删除
      },
      go: {//方法
        value: function () {
          return '跑步'
        },
      }
    })
    console.log(B);  

第一个参数proto可以是{ }|目标对象| null 

参数为{ }

参数为目标对象

参数为null

 


Object.defineProperty(  )

方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

Object.defineProperty(obj, prop, descriptor)

参数

obj
要定义属性的对象。
prop
要定义或修改的属性的名称或 Symbol 。
descriptor
要定义或修改的属性描述符。

示例:

var b = Object.create({})
//var b = { }
    Object.defineProperty(b, 'key', {
      value: 37,
      writable: true,//是否能重写
      enumerable: true,//是否可以枚举(遍历)
      configurable: true,//是否可以被删除
    })
    console.log(b);

 

 


Object.defineProperties(obj, props) 

给对象添加多个属性并分别指定它们的配置。

参数:

obj在其上定义或修改属性的对象。props要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符(更多详情,请参阅 Object.defineProperty())。

 示例:

  let a = {}
    Object.defineProperties(a, {
      'x': {
        value: '吃饭',
        writable: true
      },
      'y': {
        value: '睡觉',
        writable: true
      }
    })
    console.log(a);

 


Object.entries(obj)

 返回给定对象自身可枚举属性的 [key, value] 数组。

   let A = {
      x: 1,
      y: 2,
    }
    for(let arr of Object.entries(A)){
      console.log(arr);// ['x', 1]   ['y', 2]
    }

对arr用es6的方法进行解构

for(let [key,value] of Object.entries(A)){
      console.log(key,value);
    }

 


Object.freeze(obj)

冻结对象:其他代码不能删除或更改任何属性。

返回值

被冻结的对象。


Object.getOwnPropertyDescriptor(obj,prop)

返回对象指定的属性配置

参数:

obj

需要查找的目标对象

prop

目标对象内属性名称

  let A = {
      x: 1,
      y: 2,
    }
console.log(Object.getOwnPropertyDescriptor(A,'x'));
打印结果:


Object.is(value1,value2)

比较两个值是否相同。所有 NaN 值都相等(这与==和===不同)。

返回值: 布尔值

Object.is() 与 === 运算符的区别是什么

双等号运算符(==)仅仅比较值,而三等号运算符(===)可以比较值和类型。但是还有第三个选项 Object.is(),除了 NaN,+0 和  -0 之外,其行为与三等号于运算符相同。

       console.log(NaN===NaN);//false
    console.log(Object.is(NaN, NaN));//true
    console.log(+0===-0);//true
    console.log(Object.is(+0,-0));//false   

Object.keys(obj)

返回一个包含所有给定对象自身可枚举属性名称的数组。

示例:

     let A = {
      x: 1,
      y: 2,
    }
 console.log(Object.keys(A)); 
  let A = {
      x: 1,
      y: 2,
    }
   Object.keys(A).forEach(item=>{
     console.log(A[item]);
   })


Object.values(obj)

返回给定对象自身可枚举值的数组。

示例:

  let A = {
      x: 1,
      y: 2,
    }
    console.log(Object.values(A));


Object.prototype.toString()

方法返回一个表示该对象的字符串。
用于检测数据类型
 let a={}
   console.log(Object.prototype.toString.call(a) === '[object Object]');//true
  let b=[]
   console.log(Object.prototype.toString.call(b) === '[object Array]');//true
  let c='12'
   console.log(Object.prototype.toString.call(c) === '[object String]');//true
  let d=1
   console.log(Object.prototype.toString.call(d) === '[object Number]');//true

 

posted @ 2022-06-28 12:20  长安·念  阅读(384)  评论(0编辑  收藏  举报