什么是javascript中的对象?_如何动态地访问和操作对象的属性?【教程】

9次阅读

javaScript对象键值对集合,键为字符串symbol,值任意;点号仅支持合法标识符静态键名,方括号支持动态、特殊字符、Symbol及数字键;安全读取嵌套属性用可选链(?.)或逻辑与判断;动态增删属性须用方括号,delete有不可配置属性陷阱,不可用赋undefined代替删除。

什么是javascript中的对象?_如何动态地访问和操作对象的属性?【教程】

javascript 中的对象不是“某种容器”或“抽象概念”,它是一组键值对的集合,键是字符串(或 Symbol),值可以是任意类型——包括函数,这时候就叫方法。

对象属性访问:点号和方括号的区别在哪?

点号 . 只能访问**合法标识符形式的静态键名**,比如 obj.nameobj.$id;一旦键名含空格、短横线、数字开头,或需要运行时计算,就必须用方括号 []

  • obj["first name"] —— 键名含空格,点号会报错
  • obj["user-" + id] —— 动态拼接键名,点号无法做到
  • obj[Symbol("meta")] —— Symbol 作为键,只能用方括号
  • obj[123] —— 数字键会被自动转为字符串 "123",仍属合法属性访问

如何安全地读取可能不存在的嵌套属性?

直接链式访问如 user.profile.address.city 在中间某层为 NULLundefined 时会抛出 TypeError: Cannot read Property 'address' of undefined

  • ES2020 起可用可选链操作符:user?.profile?.address?.city,遇到 null/undefined 立即返回 undefined
  • 旧环境可用逻辑判断:user && user.profile && user.profile.address && user.profile.address.city
  • 不推荐用 try/catch 包裹访问——开销大,且掩盖真实错误场景

动态设置或删除属性时要注意什么?

赋值和删除都必须用方括号语法(除非键名确定且合法),但删除操作有隐性陷阱。

立即学习Java免费学习笔记(深入)”;

  • 添加/修改:obj[keyName] = valueobj[keyName] ??= defaultValue
  • 删除:delete obj[keyName] —— 成功返回 true,但对不可配置属性(如 Object.defineProperty(obj, "x", { configurable: false }))返回 false,且不报错
  • 避免用 obj.key = undefined 来“删除”属性——这只会把值设为 undefinedkey in obj 仍为 true
  • Reflect.deleteProperty(obj, keyName) 行为与 delete 一致,但更适配 proxy 场景

真正容易被忽略的是属性的“可枚举性”和“配置性”——它们不随赋值自动继承,而由 Object.definePropertyObject.defineProperties 控制;用方括号赋值创建的属性默认是可枚举、可配置、可写的,但一旦被改写过这些特性,后续的动态访问不会自动恢复。

text=ZqhQzanResources