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
相关推荐
不听话坏1 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
likeyi072 小时前
require 和 import的区别
开发语言·前端
pany2 小时前
做 AI 友好的开源 Vue3 模板 🌈
前端·vue.js·ai编程
小二·2 小时前
React 19 + Next.js 15 现代前端开发实战:App Router / Server Components / 流式渲染
前端·javascript·react.js
谙忆10244 小时前
前端图片直传对象存储:OSS/S3 预签名 URL、STS 临时凭证与回调校验
前端
CHNE_TAO_EMSM5 小时前
Android studio 打开文件时自动下载源码
前端·javascript·android studio
一孤程5 小时前
Airtest自动化测试第五篇:小程序与Web测试——跨平台自动化全覆盖
前端·自动化测试·小程序·自动化·测试·airtest
IT_陈寒5 小时前
SpringBoot自动配置不是你以为的那样的智能
前端·人工智能·后端
yume_sibai6 小时前
大屏数据可视化 - 边框红绿呼吸灯实现详解
前端·信息可视化·typescript
竹林8187 小时前
从 ethers.js 迁移到 Viem:一个签名验证 Bug 让我彻底放弃旧爱
javascript