Object 简介及语法(长期更新)

349 阅读2分钟

前言

还记得有一次面试的时候, 面试官问了一个Object,但当时只是觉得考察点是object类型,没有想到JavaScript标准内置对象Object的方法

Object - javaScript | MDN

Object

Object构造函数创建一个对象包装器

在JavaScript中,几乎所有的对象都是Object类型的实例,它们都会从Object.prototype继承属性和方法。Object 构造函数为给定值创建一个对象包装器。Object构造函数,会根据给定的参数创建对象,具体有以下情况:

  • 如果给定值是 null 或 undefined,将会创建并返回一个空对象
  • 如果传进去的是一个基本类型的值,则会构造其包装类型的对象
  • 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址

当以非构造函数形式被调用时,Object 的行为等同于 new Object()。 可查看 对象初始化/字面量语法

Object 构造函数的属性

Object.length 的值为1

Object.prototype  可以为所有的Object类型的对象添加属性

let a = new Object()
a._propto_ === Object.prototype  (原型链知识) 

语法

//构造函数初始化器
new Object([value])

//对象初始化
{ [ nameValuePair1[, nameValuePair2[, ...nameValuePairN] ] ] }

静态方法

Object.assign()

合并具有 相同属性的对象时 source源对象中与目标对象中的键相同 源对象中的键会替代前面相同的键

// 语法
  Object.assign(target, ...sources)
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);

console.log(target) //{ a: 1, b: 4, c: 5 } 会改变原来的值
console.log(returnedTarget) //{ a: 1, b: 4, c: 5 } 
console.log(source)//{ b: 4, c: 5 } 不会改变

//常用:

let a = Object.assign(obj,{}) // 注意浅拷贝

Object.defineProperty()

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

通过其属性值控制新定义的属性并且可以修改对象上原有的属性值

语法

Object.defineProperty(obj, prop, descriptor)

const object1 = {};
Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});
object1.property1 = 77;
console.log(object.property) //42

参数

  • obj

  • 要定义属性的对象。

  • prop

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

  • descriptor

  • 要定义或修改的属性描述符。