对象的扩展
1 对象的简写
ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
// 1.属性的简写
let [name, age, sex] = ["xiaowang", 20, "女"];
let p1 = {
name: name,
age: age,
sex: sex
}
console.log(p1);
//在es6中,对象的key和value如果相同,则可以简写
let p2 = {
name,
age,
sex
}
console.log(p2);
//2.方法的简写
let p3 = {
name,
age,
sex,
do: function () {
console.log("eat")
}
}
p3.do();
let p4 = {
name,
age,
sex,
do() {
console.log("eat")
}
}
p4.do();
2 属性名表达式
JavaScript 定义对象的属性,有两种方法:点运算符和中括号运算符
但是,如果使用字面量方式定义对象(使用大括号),在 ES5 中只能使用标识符,而不能使用变量定义属性。
也就是说在ES5中 key/value key是固定不变的,在ES6中,支持属性表达式,支持key发生变化
//在ES5中 key/value key是固定不变的
let p5 = {
name: "laowang",
sex: "女"
}
// 在ES6中,支持key发生变化
let a = "name";
let b = "sex";
let p6 = {
[a]: "laowang",
[b + "1"]: "nv"
}
console.log(p6)
//表达式还可以用于定义方法名
3 对象的扩展运算符
ES2018 将这个运算符引入了对象。
let { a, b, ...c } = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5
}
console.log(c)
4 对象新增的方法
4.1 Object.is()
判断对象是否相等 相当于===,修复NaN不等自己的问题
console.log(Object.is(1, 1))
console.log(Object.is({}, {}))
console.log(Object.is(NaN, NaN))
4.2 合并方法Object.assign
let obj1 = { a: 1 };
let obj2 = { b: 2 };
let obj3 = { c: 3 };
let newObj = Object.assign(obj1, obj2, obj3);
console.log(newObj)
4.3 Object.freeze
Object.freeze()
方法可以冻结一个对象。- 一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。
freeze()
返回和传入的参数相同的对象。
4.4 Object.hasOwn
-
在过去我们判断某个字符串变量是否是对象的自有属性时,通常使用
Object
对象原型链上的hasOwnProperty
方法来判断,但是 JavaScript 普通对象的原型可以被覆盖 -
现在 ECMAScript 官方正式提出
Object.hasOwn
提案,快捷判断对象自有属性,提高代码可读性。 -
有时候我们根据需要使用
in
操作符判断某参数是否是对象的属性,in
操作符与Object.hasOwn
的不同在于除了判断对象的自有属性外,还会检查原型链上是否包含这一属性
4.5 Object.seal()
Object.seal()
方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置(不可被删除)。当前属性的值只要原来是可写的就可以改变。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!