ES6中对象新增了哪些扩展?

一、属性的简写

当对象字面量的属性名与变量名相同时,可以省略属性名,直接使用变量名作为属性名。

javascript 复制代码
const x = 10;
const y = 20;

// ES6之前
const obj1 = { x: x, y: y };

// ES6属性简写
const obj2 = { x, y };

注意:简写的对象方法不能用作构造函数,否则会报错

二、方法简写

在对象字面量中定义方法时,可以省略冒号和 function 关键字。

javascript 复制代码
// ES6之前
const obj1 = {
  method: function() {
    // 方法内容
  }
};

// ES6方法简写
const obj2 = {
  method() {
    // 方法内容
  }
};

三、计算属性名

在对象字面量中,可以使用计算表达式来定义属性名。

javascript 复制代码
const prefix = "foo";
const obj = {
  [prefix + "Bar"]: 42
};

console.log(obj.fooBar); // 输出 42

四、对象解构赋值

可以从对象中提取属性并赋值给变量。

javascript 复制代码
const obj = { x: 10, y: 20 };

const { x, y } = obj;

console.log(x, y); // 输出 10 20

五、Object.assign 方法

用于将一个或多个源对象的属性复制到目标对象。

javascript 复制代码
const target = { a: 1 };
const source = { b: 2, c: 3 };

const result = Object.assign(target, source);

console.log(result); // 输出 { a: 1, b: 2, c: 3 }

六、Object.keys、Object.values 和 Object.entries

这些静态方法用于获取对象的键、值和键值对的数组。

javascript 复制代码
const obj = { a: 1, b: 2, c: 3 };

console.log(Object.keys(obj)); // 输出 ["a", "b", "c"]
console.log(Object.values(obj)); // 输出 [1, 2, 3]
console.log(Object.entries(obj)); // 输出 [["a", 1], ["b", 2], ["c", 3]]

ES6中属性的遍历

ES6 一共有 5 种方法可以遍历对象的属性。

  • for...in:循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)

  • Object.keys(obj):返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名

  • Object.getOwnPropertyNames(obj):回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名

  • Object.getOwnPropertySymbols(obj):返回一个数组,包含对象自身的所有 Symbol 属性的键名

  • Reflect.ownKeys(obj):返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举

上述遍历,都遵守同样的属性遍历的次序规则:

  • 首先遍历所有数值键,按照数值升序排列
  • 其次遍历所有字符串键,按照加入时间升序排列
  • 最后遍历所有 Symbol 键,按照加入时间升序排

对象新增的方法

  1. Object.assign(target, ...sources):该方法用于将一个或多个源对象的属性复制到目标对象中,并返回目标对象。如果有相同的属性名,后续的源对象会覆盖前面的源对象的属性值。
javascript 复制代码
const target = { a: 1 };
const source = { b: 2, c: 3 };

const result = Object.assign(target, source);
console.log(result);
// 输出:{ a: 1, b: 2, c: 3 }
  1. Object.keys(obj):该方法返回一个由目标对象的可枚举属性的键组成的数组。
javascript 复制代码
const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj);

console.log(keys);
// 输出:['a', 'b', 'c']
  1. Object.values(obj):该方法返回一个由目标对象的可枚举属性的值组成的数组。
javascript 复制代码
const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);

console.log(values);
// 输出:[1, 2, 3]
  1. Object.entries(obj):该方法返回一个由目标对象的可枚举属性的键值对组成的数组(二维数组)。
javascript 复制代码
const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);

console.log(entries);
// 输出:[['a', 1], ['b', 2], ['c', 3]]
  1. Object.fromEntries(entries):该方法将一个由键值对组成的数组(二维数组)转换为一个对象。
javascript 复制代码
const entries = [['a', 1], ['b', 2], ['c', 3]];
const obj = Object.fromEntries(entries);

console.log(obj);
// 输出:{ a: 1, b: 2, c: 3 }
  1. Object.create(proto, propertiesObject):该方法创建一个新对象,使用现有的对象作为新对象的原型,并可以可选地传入属性描述符来定义新对象的属性。可以实现对象的继承。
javascript 复制代码
const parent = {
  sayHello() {
    console.log('Hello');
  }
};

const child = Object.create(parent, {
  name: {
    value: 'Alice',
    writable: true,
    enumerable: true,
    configurable: true
  }
});

console.log(child.name);
child.sayHello(); // 输出:Hello
相关推荐
码事漫谈3 小时前
大模型输出的“隐性结构塌缩”问题及对策
前端·后端
这儿有一堆花3 小时前
前端三件套真的落后了吗?揭开现代 Web 开发的底层逻辑
前端·javascript·css·html5
.Cnn4 小时前
JavaScript 前端基础笔记(网页交互核心)
前端·javascript·笔记·交互
醉酒的李白、4 小时前
Vue3 组件通信本质:Props 下发,Emits 回传
前端·javascript·vue.js
anOnion4 小时前
构建无障碍组件之Window Splitter Pattern
前端·html·交互设计
NotFound4865 小时前
实战分享Python爬虫,如何实现高效解析 Web of Science 文献数据并导出 CSV
前端·爬虫·python
徐小夕5 小时前
PDF无限制预览!Jit-Viewer V1.5.0开源文档预览神器正式发布
前端·vue.js·github
WangJunXiang65 小时前
Haproxy搭建Web群集
前端
吴声子夜歌5 小时前
Vue.js——自定义指令
前端·vue.js·flutter
小芝麻咿呀6 小时前
vue--面试题第一部分
前端·javascript·vue.js