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

相关推荐
子兮曰19 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰19 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万19 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝19 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋20 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁20 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端