ES6对object类型做的常用升级优化
ES6 对对象(Object
)类型进行了多项升级和优化,引入了新的语法和方法,使得对象操作更加方便和强大。以下是 ES6 对对象类型的常用升级和优化:
- 属性简写
- 当对象的属性名和变量名相同时,可以省略属性值。
示例:
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 }
- 方法简写
- 在对象中定义方法时,可以省略
function
关键字。
示例:
javascript
// ES5
const obj1 = {
greet: function() {
console.log("Hello!");
},
};
// ES6
const obj2 = {
greet() {
console.log("Hello!");
},
};
obj2.greet(); // 输出:Hello!
- 计算属性名
- 使用
[]
可以在对象字面量中动态定义属性名。
示例:
javascript
const key = "name";
const obj = {
[key]: "Alice",
["age"]: 25,
};
console.log(obj); // 输出:{ name: "Alice", age: 25 }
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
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 }
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]]
Object.getOwnPropertyDescriptors()
- 返回对象所有自身属性的描述符(包括
value
、writable
、enumerable
、configurable
)。
示例:
javascript
const obj = { a: 1 };
const descriptors = Object.getOwnPropertyDescriptors(obj);
console.log(descriptors.a);
// 输出:
// {
// value: 1,
// writable: true,
// enumerable: true,
// configurable: true
// }
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(通过原型链访问)
super
关键字
- 用于在对象方法中访问原型对象的属性或方法。
示例:
javascript
const parent = {
greet() {
return "Hello!";
},
};
const child = {
greet() {
return super.greet() + " World!";
},
};
Object.setPrototypeOf(child, parent);
console.log(child.greet()); // 输出:Hello! World!
- 对象解构
- 从对象中提取属性并赋值给变量。
示例:
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
Symbol
作为属性名
- 使用
Symbol
作为对象的属性名,确保属性名的唯一性。
示例:
javascript
const key = Symbol("key");
const obj = {
[key]: "value",
};
console.log(obj[key]); // 输出:value
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