javascript对象属性动态绑定本质是用方括号[]配合字符串、变量或表达式访问/设置属性;支持计算属性名、隐式类型转换(除symbol外转字符串),点号仅适用于固定合法标识符。

JavaScript 中对象属性的动态绑定,本质是通过变量名作为字符串来访问或设置对象属性,而不是写死属性名。核心方法是使用方括号 [] 语法,配合字符串、变量或表达式。
用变量名作为字符串访问/设置属性
当属性名不确定、来自用户输入、循环变量或配置项时,不能用点号(.)写法,必须用方括号语法。
-
设置属性:
obj[variableName] = value; -
读取属性:
const val = obj[variableName]; -
删除属性:
delete obj[variableName];
例如:
const key = 'userName';
const user = {};
user[key] = 'Alice'; // 等价于 user.userName = 'Alice'
console.log(user.userName); // 'Alice'
支持表达式和计算属性名
方括号内可以是任意能求值为字符串的表达式,包括模板字符串、函数调用、拼接等。
obj[`prefix_${id}`] = data;obj[getPropName()] = value;obj[(Math.random() > 0.5 ? 'a' : 'b')] = 1;
ES6 还支持对象字面量中的 计算属性名:
const key = 'age';
const person = {
name: 'Bob',
[key]: 30 // 动态添加 age: 30
};
注意属性名类型和隐式转换
方括号里的值会自动转为字符串(除非是 Symbol)。数字、布尔、null、undefined 都会被 String() 转换:
-
obj[42]→ 实际访问的是'42'属性 -
obj[true]→ 访问的是'true'属性 -
obj[null]→ 访问的是'null'属性
若想保留原始类型(如 Symbol),需显式使用 Symbol 作为键:
const sym = Symbol('id');
obj[sym] = 123;
避免常见陷阱
点号写法只接受合法标识符,且不支持变量;方括号更灵活但也更容易出错:
- 别写成
obj.variableName—— 这是在找叫variableName的固定属性,不是用变量值 - 确保变量有值且不为
undefined或null,否则会访问'undefined'字符串键 - 如果属性名含特殊字符(空格、短横线等),只能用方括号,比如
obj['first-name']
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











