1. 主页 > 小妙招

JavaScript对象属性增删改查的5种高效技巧

(抓头发)各位刚入门的前端萌新,是不是经常被对象属性搞得头大?明明照着教程敲代码,怎么一操作属性就各种报错?今天咱们就唠点干的——教你五招玩转对象属性,包你从手忙脚乱到游刃有余!


一、点操作符 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  // 无效!原型链上的属性删不掉

??正确操作姿势??:

  1. 判断自有属性再删除:
javascript复制
if (child.hasOwnProperty('phone')) {
  delete child.phone
}
  1. 想彻底清除用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被更新

??三大神器??:

  1. Object.assign():合并对象
  2. Object.entries() + forEach 批量处理:
javascript复制
Object.entries(updates).forEach(([key, value]) => {
  product[key] = value
})
  1. 解构赋值大法:
javascript复制
const newProduct = { ...product, ...updates }

(摘眼镜长叹)说点实在的,属性操作就像拼乐高——??掌握核心技巧,就能组合出无限可能??。但千万别学我当年那样死记硬背,理解每个方法的设计初衷更重要。

最近发现个骚操作:用Proxy代理对象属性访问,能实现自动类型转换!比如:

javascript复制
const smartObj = new Proxy({}, {
  get(target, key) {
    return target[key] || '默认值'
  }
})

console.log(smartObj.undefinedProp) // 输出'默认值'

不过这是高阶玩法了,新手先把前五个技巧练熟再说。记住:??代码是写给人看的,属性命名要像给娃起名一样认真??,别整那些a1、temp、data这种让人懵逼的名字!

本文由嘻道妙招独家原创,未经允许,严禁转载