JavaScript对象支持动态属性赋值,JSON仅用于序列化/反序列化;常用方法包括:①方括号语法obj[key]=value;②Object.assign()批量合并;③扩展运算符{...obj,[key]:val}创建新对象;④自定义函数处理嵌套路径。

JavaScript 中 JSON 本身是纯数据格式,不能直接“赋值”或操作属性;真正实现动态属性赋值的是 JavaScript 对象,而 JSON 通常只用于数据的序列化(JSON.stringify())或反序列化(JSON.parse())。所以关键在于:先将 JSON 字符串转为对象,再用 JS 动态方式设置属性。
用方括号语法动态添加/修改属性
这是最常用、最灵活的方式,支持变量作为属性名:
- 语法:
obj[propertyName] = value - 适用于属性名是变量、含特殊字符、或运行时才确定的情况
- 示例:
const data = JSON.parse('{"name": "Alice"}');
const key = "age";
data[key] = 30; // 动态赋值
console.log(data); // { name: "Alice", age: 30 }用 Object.assign() 批量合并属性
适合一次性注入多个动态键值对,尤其配合解构或计算属性:
-
Object.assign(target, source)可以把 source 的所有可枚举属性复制到 target - source 可以是普通对象,也可以是动态生成的对象(如用 computed keys)
- 示例:
const obj = JSON.parse('{"id": 1}');
const dynamicProps = { status: "active", ["updated_at"]: new Date().toISOString() };
Object.assign(obj, dynamicProps);
// obj 现在包含 id、status 和 updated_at用扩展运算符(...)构造新对象
函数式写法,不修改原对象,更安全(尤其在 React 或不可变数据场景):
立即学习“Java免费学习笔记(深入)”;
- 语法:
{ ...originalObj, [key]: value } - 支持多个动态键,也支持覆盖已有属性
- 注意:扩展运算符只做浅拷贝
- 示例:
const user = JSON.parse('{"username": "bob"}');
const field = "email";
const newValue = "bob@example.com";
const updatedUser = { ...user, [field]: newValue };
console.log(updatedUser); // { username: "bob", email: "bob@example.com" }处理嵌套对象的动态赋值
如果要给深层路径(如 user.profile.avatar)动态设值,需先确保中间层级存在:
- 可手动逐层检查并创建空对象,或使用工具函数(如 Lodash 的
set()) - 简易自定义方法示例:
function setNested(obj, path, value) {
const keys = path.split('.');
let current = obj;
for (let i = 0; i < keys.length - 1; i++) {
if (current[keys[i]] === undefined) current[keys[i]] = {};
current = current[keys[i]];
}
current[keys.at(-1)] = value;
}
<p>const data = JSON.parse('{"user":{}}');
setNested(data, "user.profile.theme", "dark");
// 结果:{ user: { profile: { theme: "dark" } } }


















