Skip to content

对象

ES6(ECMAScript 2015)为 JavaScript 中的对象引入了多项改进和新特性,使得对象的创建、操作以及属性管理更加灵活和强大。以下是几个重要的 ES6 对象相关的新特性和改进:

对象字面量增强

  1. 简写属性名:如果一个对象的属性名与变量名相同,则可以省略冒号和值。

    javascript
    let name = "Alice";
    let user = { name };
    console.log(user); // 输出: { name: "Alice" }
  2. 方法定义简写:在对象中定义方法时,可以省略冒号和function关键字。

    javascript
    let user = {
      sayHello() {
        console.log("Hello!");
      },
    };
    user.sayHello(); // 输出: Hello!
  3. 计算属性名:允许使用表达式作为对象属性名。

    javascript
    let propName = "greeting";
    let obj = {
      [propName + "Message"]: "Hi there!",
    };
    console.log(obj.greetingMessage); // 输出: Hi there!

属性存在性检查

  • in 运算符可用于检查对象是否拥有某个属性(包括继承来的属性)。

    javascript
    let user = { name: "Alice" };
    console.log("name" in user); // 输出: true
    console.log("age" in user); // 输出: false

Object.assign()

  • 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它返回目标对象。

    javascript
    let target = { a: 1, b: 1 };
    let source = { b: 2, c: 3 };
    Object.assign(target, source);
    console.log(target); // 输出: { a: 1, b: 2, c: 3 }

Object.keys(), Object.values(), 和 Object.entries()

  • Object.keys() 返回给定对象自身可枚举属性的数组。

  • Object.values() 返回给定对象自身可枚举属性值的数组。

  • Object.entries() 返回给定对象自身可枚举属性的键值对数组。

    javascript
    let 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]]

Proxy

  • 允许你创建一个代理对象,它可以拦截并重新定义基本操作(如属性查找、赋值、枚举、函数调用等)。

    javascript
    let handler = {
      get: function (target, name) {
        return name in target ? target[name] : "Not found";
      },
    };
    
    let proxy = new Proxy({ name: "Alice" }, handler);
    console.log(proxy.name); // 输出: Alice
    console.log(proxy.age); // 输出: Not found

这些新特性让对象的操作更加直观、高效,并且提供了更多灵活性来处理复杂的数据结构。通过利用这些特性,开发者能够编写出更加简洁、易读和功能强大的代码。

Released under the MIT License.