0

0

JavaScript中动态创建对象属性名:计算属性名与赋值技巧

DDD

DDD

发布时间:2025-10-10 12:49:19

|

696人浏览过

|

来源于php中文网

原创

JavaScript中动态创建对象属性名:计算属性名与赋值技巧

本文详细阐述了在JavaScript中如何动态地创建对象属性名。针对直接使用模板字符串作为键的常见误区,教程介绍了两种核心方法:利用ES6的计算属性名(Computed Property Names)语法在对象字面量中直接定义动态键,以及通过后续的方括号赋值操作动态添加属性,并提供了清晰的代码示例和适用场景分析。

1. 理解问题:动态键的常见误区

javascript中,当我们需要根据变量的值来定义对象的属性名时,初学者常会尝试使用模板字符串或直接将变量放入对象字面量的键位置,例如:

const otherName = "userName";
const otherValue = "Alice";

// 错误的尝试,会导致语法错误
let temp = { `${otherName}`: `${otherValue}` };

这种写法会导致语法错误,因为在JavaScript的对象字面量中,键通常是标识符(不带引号的名称)或字符串字面量(用引号括起来的字符串)。直接使用模板字符串作为键的语法是不被允许的,JavaScript引擎无法正确解析这种结构。

2. 解决方案一:ES6计算属性名(Computed Property Names)

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" }

工作原理:

Magic AI Avatars
Magic AI Avatars

神奇的AI头像,获得200多个由AI制作的自定义头像。

下载

当JavaScript引擎解析 { [otherName]: otherValue } 时,它会首先对 [otherName] 中的 otherName 变量进行求值。如果 otherName 的值为 "userName",那么这个表达式的结果就是 "userName",最终对象 temp 将会拥有一个名为 userName 的属性。

3. 解决方案二:动态属性赋值

除了在对象字面量中直接使用计算属性名,我们还可以在对象创建之后,通过方括号 [] 语法来动态地添加或修改属性。这种方法在需要循环添加多个属性,或者在对象创建后根据条件动态赋值时非常有用。

语法:

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' }
  • 条件性赋值: 根据某些条件动态地决定是否添加某个属性。

4. 注意事项与总结

  • 键的类型: 无论使用计算属性名还是动态赋值,方括号内的表达式结果(或赋值的 key)最终都会被转换为字符串作为属性名,除非它是 Symbol 类型。
  • 点语法 vs. 方括号语法:
    • object.propertyName:当属性名是固定且合法的标识符时使用。
    • object[propertyNameVariable]:当属性名是变量、表达式的结果,或包含特殊字符(如空格、连字符)时使用。
  • 优先级: 在对象字面量中,计算属性名是创建动态键的最简洁和推荐的方式。如果对象已经存在,或者需要在运行时逐步构建对象,则动态属性赋值更为灵活。

通过掌握ES6的计算属性名和动态属性赋值这两种方法,开发者可以有效地在JavaScript中处理各种动态创建对象属性的场景,避免常见的语法错误,并使代码更加灵活和健壮。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

233

2025.12.24

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

210

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

322

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

292

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

178

2025.08.07

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号