浅克隆

Version >= 6

ES6 的 Object.assign() 函数可用于将现有 Object 实例中的所有可枚举属性复制到新实例。

const existing = { a: 1, b: 2, c: 3 };

const clone = Object.assign({}, existing);

除了 String 之外,这还包括 Symbol 属性。

对象休息/扩散解构当前是第 3 阶段提议,它提供了一种更简单的方法来创建对象实例的浅克隆:

const existing = { a: 1, b: 2, c: 3 };

const { ...clone } = existing;

如果你需要支持旧版本的 JavaScript,那么克隆 Object 的最兼容方法是手动迭代其属性并使用 .hasOwnProperty() 过滤掉继承的属性。

var existing = { a: 1, b: 2, c: 3 };

var clone = {};
for (var prop in existing) {
  if (existing.hasOwnProperty(prop)) {
    clone[prop] = existing[prop];
  }
}