Object对象的方法汇总

185 阅读2分钟

Object.hasOwnProperty(prop):

判断一个对象是否包含自身的属性,而非继承属性和prototype上的属性,返回布尔值

function Foo(){
    this.name = 'jacky_li'
    this.hobby = function(){}
}
Foo.prototype.sex = 'male'
Foo.prototype.age = function(){}

var obj = new Foo()

obj.hasOwnProperty('name') // 自身属性,true
obj.hasOwnProperty('hobby') // 自身方法,true
obj.hasOwnProperty('sex') // 原型上的属性,返回false
obj.hasOwnProperty('age') // 原型上的方法,返回false
Obj.hasOwnProperty('toString') // 继承的方法,返回false

通常和for···in搭配使用,遍历一个对象自身的属性:

for(let item in obj) {
    if(obj.hasOwnProperty(item)) {
        // 遍历自身的属性
    }
}

Object.assign(target, resource1, resource2, ···):

【ES6】合并多个对象

  • 将多个原对象的属性和方法都合并到了目标对象上面,后合并的属性(方法)会覆盖之前的同名属性(方法)。
  • 只会拷贝对象本身的属性,不会拷贝继承属性,也不会拷贝不可枚举的属性。
  • 浅拷贝,如果拷贝过来的属性的值是对象等复合属性,那么只能拷贝过来一个引用。
  • Object.assign只能将属性值进行复制,如果属性值是一个get(取值函数)的话,那么会先求值,然后再复制。
  • 如果传入的参数不是Object,会进行类型转换。
1.为对象添加属性和方法
class Point{
    constructor(x, y) {
        Object.assign(this, {x, y})
    }
}

2.克隆对象
function clone(origin) {
    let originProto = origin.getPrototypeOf(origin);
    //根据原型对象,创建新的空对象,再assign
    return Object.assign(Object.create(originProto), origin)
}

3.指定默认值,合并参数
var defaults = {}
function processContent(options) {
    options = Object.assign({}, defaults, options) 
}

Object.create():

Object.entries(obj):

返回一个给定对象自身可枚举属性的键值对数组

返回值与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。

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

借助此方法可以将Object转换成Map:

var obj = { foo: "bar", baz: 42 };
var map = new Map(Object.entries(obj));
console.log(map); // Map类型 { foo: "bar", baz: 42 }

Object.freeze():

阻止修改现有属性的特性和值,并阻止添加新属性,返回该对象(冻结对象)

// 彻底冻结对象
function freeze(obj){
  Object.freeze(obj);
  Object.values(obj).forEach(function (value,index) {
    if(typeof value === 'object'){
      freeze(value);
    }
  })
}

Object.getPrototypeOf():

读取一个对象的prototype对象

Object.setPrototypeOf():

设置一个对象的prototype对象

Object.is():

判断两个值是否相等,返回Boolean

多数情况下,Object.is()等价于'==='

对于NaN,0,+0,-0来说:

NaN === NaN // false
Object.is(NaN, NaN) // true

0 === -0 // true
Object.is(0, -0) // false

-0 === +0 // true
Object.is(-0, +0) // false

Object.keys():

返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键名

Object.values():

返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值

var obj = {a: 'aa', b: 'bb'}
Object.keys(obj) //["a", "b"]
Object.values(obj) //["aa", "bb"]