JavaScript对象属性增删改查的5种高效技巧
日期:2025-05-27 21:48:17 •原创
(抓头发)各位刚入门的前端萌新,是不是经常被对象属性搞得头大?明明照着教程敲代码,怎么一操作属性就各种报错?今天咱们就唠点干的——教你五招玩转对象属性,包你从手忙脚乱到游刃有余!
一、点操作符 vs 方括号:选对姿势很重要
(拍大腿)先说个最常见的坑!很多人分不清.
和[]
的区别。看这段代码:
javascript复制const phone = { "brand": "小米", "128GB": true // 数字开头的属性名必须用字符串 } console.log(phone.128GB) // 报错! console.log(phone['128GB']) // 正确输出true
??重点来了??:
- 普通属性用点操作符:
obj.name
- 特殊字符属性用方括号:
obj['2023-sales']
- 动态属性名必须用方括号:
javascript复制const key = 'color' const car = {} car[key] = '红色' // 相当于car.color = '红色'
(突然拍脑门)哎对了!方括号里其实可以玩骚操作:
javascript复制const index = 3 const users = { [`user_${index}`]: '张三' // 生成user_3属性 }
二、删除属性:你以为的delete可能是个骗子
(推眼镜)删除属性看似简单,暗藏玄机!看这个例子:
javascript复制const parent = { money: 100 } const child = Object.create(parent) child.phone = 'iPhone' delete child.phone // 成功删除 delete child.money // 无效!原型链上的属性删不掉
??正确操作姿势??:
- 判断自有属性再删除:
javascript复制if (child.hasOwnProperty('phone')) { delete child.phone }
- 想彻底清除用
Reflect.deleteProperty
:
javascript复制Reflect.deleteProperty(child, 'money') // 仍然无效,但返回false更明确
(突然压低声音)偷偷告诉你:把属性设为undefined不等于删除!内存里还占着位置呢!
三、动态属性设置:像搭积木一样玩转对象
(敲黑板)这个技巧能让你代码灵活度飙升!举个实际场景——处理表单数据:
javascript复制const formData = {} const inputs = document.querySelectorAll('input') inputs.forEach(input => { formData[input.name] = input.value // 动态生成属性 })
??进阶玩法??:
- 配合计算属性名:
javascript复制const prefix = 'user_' const dynamicObj = { [prefix + 'id']: 123, [prefix + 'name']: '李四' }
- 混用展开运算符:
javascript复制const baseConfig = { debug: false } const envConfig = { apiUrl: 'https://xxx.com' } const finalConfig = { ...baseConfig, ...envConfig }
四、属性保护:给属性上把智能锁
(突然严肃)有些重要属性可不能随便改!试试Object.defineProperty
:
javascript复制const bankAccount = {} Object.defineProperty(bankAccount, 'balance', { value: 1000, writable: false, // 不可修改 enumerable: true // 可被遍历 }) bankAccount.balance = 2000 // 静默失败! console.log(bankAccount.balance) // 还是1000
??配置项详解??:
writable
:是否可修改configurable
:能否删除或重新配置enumerable
:是否出现在遍历中
(插入血泪史)当年我手贱把id属性设为configurable:false,结果整个项目无法重置用户id,被测试妹子追杀三条街!
五、批量操作:拒绝重复劳动的利器
(突然兴奋)最后这个技巧能让你少写50%代码!看这个电商场景:
javascript复制// 原始数据 const product = { id: 123, name: '智能手表', price: 599 } // 批量更新 const updates = { price: 549, stock: 100, discount: '20%' } Object.assign(product, updates) // 现在product多了stock和discount属性,price被更新
??三大神器??:
Object.assign()
:合并对象Object.entries()
+forEach
批量处理:
javascript复制Object.entries(updates).forEach(([key, value]) => { product[key] = value })
- 解构赋值大法:
javascript复制const newProduct = { ...product, ...updates }
(摘眼镜长叹)说点实在的,属性操作就像拼乐高——??掌握核心技巧,就能组合出无限可能??。但千万别学我当年那样死记硬背,理解每个方法的设计初衷更重要。
最近发现个骚操作:用Proxy代理对象属性访问,能实现自动类型转换!比如:
javascript复制const smartObj = new Proxy({}, { get(target, key) { return target[key] || '默认值' } }) console.log(smartObj.undefinedProp) // 输出'默认值'
不过这是高阶玩法了,新手先把前五个技巧练熟再说。记住:??代码是写给人看的,属性命名要像给娃起名一样认真??,别整那些a1、temp、data
这种让人懵逼的名字!
本文由嘻道妙招独家原创,未经允许,严禁转载