object常用的方法

1,Object.assign()

用于多个对象的复制,返回修改后的对象。若一个对象为空的话,那就是浅拷贝。

第一个参数作为目标对象,是将后面一个对象参数,合并到前面一个对象参数。
如果有相同的属性,后面的会对前面的进行覆盖。

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }

2,Object.create()

用于创建一个新的对象,使用现有参数作为新创建对象的原型。

const person = {
  isHuman: false,
  printIntroduction: function() {
    console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
  }
};

const me = Object.create(person);

me.name = 'jjj' // 可以添加属性,在创建的对象上面。
me.isHuman = true// 可以修改person带的属性
me.printIntroduction() // 可以执行方法

3,Object.defineProperties()

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

Object.defineProperties(obj, props)

obj: 在其上定义或修改属性的对象。

props:

  • value: 属性的值
  • writable:当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的value,才能被=改变。 默认为 false。
  • get:作为该属性的 getter 函数,如果没有 getter则为undefined。函数返回值将被用作属性的值。
  • set:作为属性的 setter 函数,如果没有 setter,则为undefined。函数将仅接受参数赋值给该属性的新值。 默认为 undefined
  • configurable: 当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变, 默认为 false
  • enumerable:当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。 默认为 false。
var obj = {};
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
  // etc. etc.
});

4,Object.defineProperty()

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。和上面类似,只是上面的方法可以一次创建多个属性,这个方法只能创建一个属性。

Object.defineProperty(obj,prop,descriptor)
const object1 = {};
Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

5,Object.prototype.hasOwnProperty()

hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。

常常的使用方式,就是和for in搭配使用,for in会遍历可枚举属性,原型上的属性也会遍历,因此可以用hasOwnProperty()这个方法来判断,当前属性是否是元素自身的属性。

for (var name in buz) {
  if (buz.hasOwnProperty(name)) {
    console.log('this is fog (' +
      name + ') for sure. Value: ' + buz[name]);
  }
  else {
    console.log(name); // toString or something else
  }
}

6, Object.keys()

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。

var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

常常在Map对象中使用。

7,Object.values()

Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

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

7,Object.prototype.toString()

toString() 方法返回一个表示该对象的字符串。

每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。
默认情况下,toString() 方法被每个 Object 对象继承。
如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]”,其中 type 是对象的类型。
比如:

var o = new Object();
o.toString(); // 返回 [object Object]

可以在对象中重写toString方法

function Dog(name) {
  this.name = name;
}
const dog1 = new Dog('Gabby');
Dog.prototype.toString = function dogToString() {
  return `${this.name}`;
};

8,Object.is()

Object.is() 方法判断两个值是否为同一个值。

Object.is() 方法判断两个值是否为同一个值,如果满足以下任意条件则两个值相等:

都是 undefined
都是 null
都是 true 或都是 false
都是相同长度、相同字符、按相同顺序排列的字符串
都是相同对象(意味着都是同一个对象的值引用)
都是数字且

  • 都是 +0
  • 都是 -0
  • 都是 NaN
  • 都是同一个值,
  • 非零且都不是 NaN

Object.is() 与 == 不同。== 运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换(这种行为将 “” == false 判断为 true),而 Object.is 不会强制转换两边的值。

Object.is() 与 === 也不相同。差别是它们对待有符号的零和 NaN 不同,例如,=== 运算符(也包括 == 运算符)将数字 -0 和 +0 视为相等,而将 Number.NaN 与 NaN 视为不相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值