ES6对object类型做的常用升级优化

ES6对object类型做的常用升级优化

ES6 对对象(Object)类型进行了多项升级和优化,引入了新的语法和方法,使得对象操作更加方便和强大。以下是 ES6 对对象类型的常用升级和优化:

  1. 属性简写
  • 当对象的属性名和变量名相同时,可以省略属性值。

示例:

javascript 复制代码
const name = "Alice";
const age = 25;

// ES5
const obj1 = {
  name: name,
  age: age,
};

// ES6
const obj2 = {
  name,
  age,
};

console.log(obj2); // 输出:{ name: "Alice", age: 25 }
  1. 方法简写
  • 在对象中定义方法时,可以省略 function 关键字。

示例:

javascript 复制代码
// ES5
const obj1 = {
  greet: function() {
    console.log("Hello!");
  },
};

// ES6
const obj2 = {
  greet() {
    console.log("Hello!");
  },
};

obj2.greet(); // 输出:Hello!
  1. 计算属性名
  • 使用 [] 可以在对象字面量中动态定义属性名。

示例:

javascript 复制代码
const key = "name";
const obj = {
  [key]: "Alice",
  ["age"]: 25,
};

console.log(obj); // 输出:{ name: "Alice", age: 25 }
  1. Object.is()
  • 比较两个值是否严格相等,类似于 ===,但处理了一些特殊情况(如 NaN+0/-0)。

示例:

javascript 复制代码
console.log(Object.is(NaN, NaN)); // 输出:true
console.log(Object.is(+0, -0)); // 输出:false
console.log(Object.is(42, 42)); // 输出:true
  1. Object.assign()
  • 将一个或多个源对象的属性复制到目标对象中,返回目标对象。
  • 用于对象的浅拷贝或合并。

示例:

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

const result = Object.assign(target, source1, source2);
console.log(result); // 输出:{ a: 1, b: 2, c: 3 }
console.log(target); // 输出:{ a: 1, b: 2, c: 3 }
  1. Object.keys()Object.values()Object.entries()
  • 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]]
  1. Object.getOwnPropertyDescriptors()
  • 返回对象所有自身属性的描述符(包括 valuewritableenumerableconfigurable)。

示例:

javascript 复制代码
const obj = { a: 1 };
const descriptors = Object.getOwnPropertyDescriptors(obj);

console.log(descriptors.a);
// 输出:
// {
//   value: 1,
//   writable: true,
//   enumerable: true,
//   configurable: true
// }
  1. Object.setPrototypeOf()Object.getPrototypeOf()
  • Object.setPrototypeOf():设置对象的原型。
  • Object.getPrototypeOf():获取对象的原型。

示例:

javascript 复制代码
const parent = { a: 1 };
const child = { b: 2 };

Object.setPrototypeOf(child, parent);
console.log(Object.getPrototypeOf(child)); // 输出:{ a: 1 }
console.log(child.a); // 输出:1(通过原型链访问)
  1. super 关键字
  • 用于在对象方法中访问原型对象的属性或方法。

示例:

javascript 复制代码
const parent = {
  greet() {
    return "Hello!";
  },
};

const child = {
  greet() {
    return super.greet() + " World!";
  },
};

Object.setPrototypeOf(child, parent);
console.log(child.greet()); // 输出:Hello! World!
  1. 对象解构
  • 从对象中提取属性并赋值给变量。

示例:

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

// 解构赋值
const { a, b } = obj;
console.log(a, b); // 输出:1 2

// 解构时重命名
const { a: x, b: y } = obj;
console.log(x, y); // 输出:1 2

// 默认值
const { d = 4 } = obj;
console.log(d); // 输出:4
  1. Symbol 作为属性名
  • 使用 Symbol 作为对象的属性名,确保属性名的唯一性。

示例:

javascript 复制代码
const key = Symbol("key");
const obj = {
  [key]: "value",
};

console.log(obj[key]); // 输出:value
  1. Object.freeze()Object.seal()
  • Object.freeze():冻结对象,使其不可修改(不能添加、删除或修改属性)。
  • Object.seal():密封对象,使其不可添加或删除属性,但可以修改现有属性。

示例:

javascript 复制代码
const obj = { a: 1 };

Object.freeze(obj);
obj.a = 2; // 无效
console.log(obj.a); // 输出:1

Object.seal(obj);
obj.a = 2; // 有效
obj.b = 3; // 无效
console.log(obj); // 输出:{ a: 2 }

总结

ES6 对对象类型的升级和优化主要包括:

  • 属性简写和方法简写。
  • 计算属性名。
  • Object.is() 用于精确比较。
  • Object.assign() 用于对象合并。
  • Object.keys()Object.values()Object.entries() 用于获取对象的键、值和键值对。
  • Object.getOwnPropertyDescriptors() 用于获取属性描述符。
  • Object.setPrototypeOf()Object.getPrototypeOf() 用于操作原型。
  • super 关键字用于访问原型方法。
  • 对象解构赋值。
  • Symbol 作为属性名。
  • Object.freeze()Object.seal() 用于对象保护。

这些特性使得对象操作更加方便和强大,提升了 JavaScript 的面向对象编程能力。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github

相关推荐
GISer_Jing20 分钟前
前端工程化和性能优化问题详解
前端·性能优化
学渣y33 分钟前
React文档-State数据扁平化
前端·javascript·react.js
njsgcs39 分钟前
画立方体软件开发笔记 js three 投影 参数建模 旋转相机 @tarikjabiri/dxf导出dxf
前端·javascript·笔记
一口一个橘子41 分钟前
[ctfshow web入门] web71
前端·web安全·网络安全
逊嘘1 小时前
【Web前端开发】HTML基础
前端·html
未脱发程序员2 小时前
【前端】每日一道面试题3:如何实现一个基于CSS Grid的12列自适应布局?
前端·css
三天不学习2 小时前
Visual Studio Code 前端项目开发规范合集【推荐插件】
前端·ide·vscode
爱分享的程序猿-Clark3 小时前
【前端分享】CSS实现3种翻页效果类型,附源码!
前端·css
Code哈哈笑3 小时前
【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
java·前端·数据库·spring boot·后端
无名之逆3 小时前
Hyperlane: Unleash the Power of Rust for High-Performance Web Services
java·开发语言·前端·后端·http·rust·web