js你不是的那些基础问题-Object 对象

1 Object 的静态方法

  所谓“静态方法”,是指部署在Object对象自身的方法。

1.1 Object.keys(),Object.getOwnPropertyNames()

  Object.keys方法和Object.getOwnPropertyNames方法都用来遍历对象的属性。

  Object.keys方法的参数是一个对象,返回一个数组。

  该数组的成员都是该对象自身的(而不是继承的)所有属性名。

var obj = {
  p1: 123,
  p2: 456
};

Object.keys(obj) // ["p1", "p2"]

  Object.getOwnPropertyNames方法与Object.keys类似,也是接受一个对象作为参数,

  返回一个数组,包含了该对象自身的所有属性名。

  对于一般的对象来说,Object.keys()Object.getOwnPropertyNames()返回的结果是一样的。

  只有涉及不可枚举属性时,才会有不一样的结果。

  Object.keys方法只返回可枚举的属性(详见《对象属性的描述对象》一章),

  Object.getOwnPropertyNames方法还返回不可枚举的属性名。

var a = ['Hello', 'World'];

Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]

  上面代码中,数组的length属性是不可枚举的属性,.

  所以只出现在Object.getOwnPropertyNames方法的返回结果中。

  一般情况下,几乎总是使用Object.keys方法,遍历对象的属性。

1.2 其他方法

除了上面提到的两个方法,Object还有不少其他静态方法,将在后文逐一详细介绍。

(1)对象属性模型的相关方法

  • Object.getOwnPropertyDescriptor():获取某个属性的描述对象。
  • Object.defineProperty():通过描述对象,定义某个属性。
  • Object.defineProperties():通过描述对象,定义多个属性。

  (2)控制对象状态的方法

  • Object.preventExtensions():防止对象扩展。
  • Object.isExtensible():判断对象是否可扩展。
  • Object.seal():禁止对象配置。
  • Object.isSealed():判断一个对象是否可配置。
  • Object.freeze():冻结一个对象。
  • Object.isFrozen():判断一个对象是否被冻结。

  (3)原型链相关方法

  • Object.create():该方法可以指定原型对象和属性,返回一个新的对象。
  • Object.getPrototypeOf():获取对象的Prototype对象。

2 Object 的实例方法

  除了静态方法,还有不少方法定义在Object.prototype对象。

  它们称为实例方法,所有Object的实例对象都继承了这些方法。

  Object实例对象的方法,主要有以下六个。

  • Object.prototype.valueOf():返回当前对象对应的值。
  • Object.prototype.toString():返回当前对象对应的字符串形式。
  • Object.prototype.toLocaleString():返回当前对象对应的本地字符串形式。
  • Object.prototype.hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。
  • Object.prototype.isPrototypeOf():判断当前对象是否为另一个对象的原型。
  • Object.prototype.propertyIsEnumerable():判断某个属性是否可枚举。

2.1 Object.prototype.hasOwnProperty()

  Object.prototype.hasOwnProperty方法接受一个字符串作为参数,

  返回一个布尔值,表示该实例对象自身是否具有该属性。

var obj = {
  p: 123
};

obj.hasOwnProperty('p') // true
obj.hasOwnProperty('toString') // false

  上面代码中,对象obj自身具有p属性,所以返回truetoString属性是继承的,所以返回false

 

文章内容转自 阮一峰老师 JavaScript教程 https://wangdoc.com/javascript/index.html

 

posted @ 2019-08-14 20:18  WernerWu  阅读(123)  评论(0编辑  收藏  举报