Object 常用API

写这篇文章主要是用来整理一下常用的Object API,加深记忆以及方便后期自己查阅

构造函数

Object()构造函数

Object构造函数将给定的值包装为一个新对象

  • 如果给定的值是nullundefined,它会创建并返回一个空对象
  • 否则,将返回一个和给定的值相对应的类型的对象
  • 如果给定值是一个已经存在的对象,则会返回这个已经存在的值(相同地址)

静态方法

Object.assign()

通过复制一个或多个对象来创建一个新的对象。

Object.assign()方法用于将所有可枚举属性的值从一个

let a = {b: 1, c: 2}
let d = {e: 3, f: 4, b: 5}
let g = Object.assign(a, d)

console.log(a)	// {b: 5, c: 2, e: 3, f: 4}
console.log(g)	// {b: 5, c: 2, e: 3, f: 4}
console.log(a === g) // true

或多个源对象分配到目标对象。它将返回目标对象。

语法

Object.assign(target, ...sources)

Object.create()

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__

语法

Object.create(proto, [propertiesObject])

参数

proto

新创建对象的原型对象

propertiesObject

可选,需要传入一个对象,如果该参数被指定且不为undefined,该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。

使用

let a = {
    b: () => {
        console.log(1)
    },
    c: function (){
        console.log(2)
    }
}

let d = Object.create(a)

console.log(d) // {}
console.log(d.__proto__) // {b: () => { console.log(1) }, c: ƒ ()}

propertiesObject参数的使用

let e = {f: 1, g: 2}
d = Object.create(a, e)	
// VM982:1 Uncaught TypeError: Property description must be an object: 1

e = {f: {value: 1}, g: {value: 2}}
d = Object.create(a, e)

console.log(d)	// {f: {value: 1}, g: {value: 2}}
console.log(d.__proto__) // b: () => { console.log(1) }, c: ƒ ()}

Object.defineProperty()

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

语法

Object.defineProperty(obj, prop, descriptor)

参数

obj

要定义属性的对象

prop

要定义或修改的属性的名称或Symbol

descriptor

要定义或修改的属性描述

返回值

被传递给函数的对象

使用

let a = {b: 1, c: 2}
let d = Object.defineProperty(a, 'e', 1) // Uncaught TypeError: Property description must be an object: 1
let d = Object.defineProperty(a, 'e', {value: 1})
d = Object.defineProperty(a, 'b', {value: 3})
console.log(a) // {b: 3, c: 2, e: 1} e不可修改
console.log(b) // {b: 3, c: 2, e: 1} e不可修改
console.log(a === d) // true

Object.defineProperties()

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

Object.defineProperties本质上定义了obj 对象上props的可枚举属性相对应的所有属性。

语法

Object.defineProperties(obj, props)

使用

var obj = {};
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
});

Object.freeze()

Object.freeze()方法可以冻结一个对象。一个被冻结的对象再也不能被修改。冻结了一个对象则不能向这个对象添加新属性,不能删除已有属性,不能修改该对象已有属性的可枚举性,可配置性,可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze()返回和传入的参数相同的对象。

let a = {b: 1, c: 2}
Object.freeze(a)
a.b = 3
a.d = 4
console.log(a) // {b: 1, c: 2}

Object.getOwnPropertyDescriptor

返回对象指定的属性配置

let a = {b: 1, c: 2}
let d = Object.getOwnPropertyDescriptor(a, 'b')
console.log(d) // {value: 1, writable: true, enumerable: true, configurable: true}

Object.getPropertyOf

返回指定对象的原型对象,即内部[[Prototype]]属性的值

Object.is

判断两个值是否为同一个值

Object.keys

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

Object.setPrototypeof

设置对象的原型

Object.value

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

实例方法

Object.prototype.hasOwnProperty

返回一个布尔值,用于表示一个对象自身是否包含指定的属性,该方法并不会查找原型链上继承来的属性

Object.prototype.isPrototypeOf

返回一个布尔值,用于表示该方法所调用的对象是否在指定对象的原型链中

上一篇:C#学习-Day5


下一篇:C# 基础知识 (1)