Bootstrap

对象的常用方法

1. for in 遍历对象的属性

2. Object.keys()

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

const obj = {
  a: 2,
  b: 1,
  c: 0
}
for (let value of Object.keys(obj)) {
  console.log(value)    //a,b,c
}

3.Object.create()

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

4. Object.assign()

Object.assign() 方法用于对象的合并,将源对象的所有可枚举属性,复制到目标对象。
返回目标对象。
Object.assign拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举的属性(enumerable: false)。
Object.assign(target, …sources)

(1) 可以克隆一个对象
const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
obj.a = 2;
//obj =  {a: 2}   copy = {a: 1}
(2) object.assign()是浅拷贝
//var obj2 = JSON.parse(JSON.stringify(obj))//深拷贝常用方法
const obj1 = { a: { b: 1 } };
const obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2
(3) 同名属性会替换
const target = { a: { b: 'c', d: 'e' } }
const source = { a: { b: 'hello' } }
Object.assign(target, source)
// { a: { b: 'hello' } }
(4) 可以合并多个对象
const merge = (target, ...sources) => Object.assign(target, ...sources);

对象中的扩展运算符(…) 用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
和Object.assign()作用一样,都用于合并对象,并且也是浅拷贝

/* let bar = { a: 1, b: 2 };
let baz = { ...bar }; // { a: 1, b: 2 }
 */
let bar = { a: 1, b: 2 };
let baz = { ...bar, ...{ a: 2, b: 4 } };  // {a: 2, b: 4}

5. Object.hasOwnProperty()

返回一个布尔值
用来检测对象自身属性中是否具有指定的属性。和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

const object1 = new Object();
object1.property1 = 42;

console.log(object1.hasOwnProperty('property1'));
// expected output: true

console.log(object1.hasOwnProperty('toString'));
// expected output: false

console.log(object1.hasOwnProperty('hasOwnProperty'));
// expected output: false

6. Object.isPrototypeOf()

用于测试一个对象是否存在于另一个对象的原型链上。
a.isPrototypeOf(b);判断的是a对象是否存在于b对象的原型链之中
A instanceof B 判断的是B.prototype是否存在与A的原型链之中

function Foo() {}
function Bar() {}
function Baz() {}

Bar.prototype = Object.create(Foo.prototype);
Baz.prototype = Object.create(Bar.prototype);

var baz = new Baz();

console.log(Baz.prototype.isPrototypeOf(baz)); // true
console.log(Bar.prototype.isPrototypeOf(baz)); // true
console.log(Foo.prototype.isPrototypeOf(baz)); // true
console.log(Object.prototype.isPrototypeOf(baz)); // true

//检查 baz 对象是否继承自 Foo.prototype:
if (Foo.prototype.isPrototypeOf(baz)) {
  // do something safe
}

7. Object.defineProperty()

劫持变量的set和get方法,将属性添加到对象,或修改现有属性的特性

var a = {};
Object.defineProperty(a, 'name', {
	value : 'kong',
	enumerable : true	//该属性是否可枚举
})

在这里插入图片描述

;