
在javascript中,当我们需要根据变量的值来定义对象的属性名时,初学者常会尝试使用模板字符串或直接将变量放入对象字面量的键位置,例如:
const otherName = "userName";
const otherValue = "Alice";
// 错误的尝试,会导致语法错误
let temp = { `${otherName}`: `${otherValue}` };这种写法会导致语法错误,因为在JavaScript的对象字面量中,键通常是标识符(不带引号的名称)或字符串字面量(用引号括起来的字符串)。直接使用模板字符串作为键的语法是不被允许的,JavaScript引擎无法正确解析这种结构。
ES6(ECMAScript 2015)引入了计算属性名(Computed Property Names)的语法,它允许我们在对象字面量中使用方括号 [] 来包裹一个表达式,该表达式的求值结果将作为对象的属性名。这是在对象创建时动态定义属性名的首选方法。
语法:
let obj = {
[expression]: value
};其中 expression 可以是任何能够求值得到字符串或 Symbol 的表达式。
立即学习“Java免费学习笔记(深入)”;
示例代码:
结合上述问题场景,我们可以使用计算属性名来正确地创建动态键值对:
const otherName = document.getElementById(`adminPanelManageUserOtherName`).value; // 假设获取到 "userName"
const otherValue = document.getElementById(`adminPanelManageUserOtherValue`).value; // 假设获取到 "Alice"
// 使用计算属性名
let temp = { [otherName]: otherValue };
console.log(temp); // 输出: { userName: "Alice" }工作原理:
当JavaScript引擎解析 { [otherName]: otherValue } 时,它会首先对 [otherName] 中的 otherName 变量进行求值。如果 otherName 的值为 "userName",那么这个表达式的结果就是 "userName",最终对象 temp 将会拥有一个名为 userName 的属性。
除了在对象字面量中直接使用计算属性名,我们还可以在对象创建之后,通过方括号 [] 语法来动态地添加或修改属性。这种方法在需要循环添加多个属性,或者在对象创建后根据条件动态赋值时非常有用。
语法:
object[key] = value;
其中 key 是一个字符串或 Symbol 类型的变量或表达式,其值将作为属性名。
示例代码:
const otherName = document.getElementById(`adminPanelManageUserOtherName`).value; // 假设获取到 "userID"
const otherValue = document.getElementById(`adminPanelManageUserOtherValue`).value; // 假设获取到 "12345"
// 先声明一个空对象
let temp = {};
// 动态赋值
temp[otherName] = otherValue;
console.log(temp); // 输出: { userID: "12345" }适用场景:
const users = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
let userMap = {};
users.forEach(user => {
userMap[user.id] = user.name;
});
console.log(userMap); // { '1': 'Alice', '2': 'Bob' }通过掌握ES6的计算属性名和动态属性赋值这两种方法,开发者可以有效地在JavaScript中处理各种动态创建对象属性的场景,避免常见的语法错误,并使代码更加灵活和健壮。
以上就是JavaScript中动态创建对象属性名:计算属性名与赋值技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号