在开发过程中,我们经常需要动态地设置一个对象的属性。有时候,这个属性的名称是固定的,我们可以直接使用点语法(.
)或方括号语法([]
)来设置。但是,在某些情况下,属性的名称是不确定的,它可能是一个变量或者从其他地方获取的数据。这时,我们需要一种方法来根据字符串名称设置对象属性。
1. 基础用法
我们可以使用方括号语法来动态设置对象的属性。例如:
const obj = {}; const propName = "foo"; obj[propName] = "bar"; console.log(obj); // 输出 {foo: "bar"}
这里,我们定义了一个空对象 obj
,然后定义了一个字符串变量 propName
,它保存了属性名称 "foo"
。最后,我们使用方括号语法来设置属性值为 "bar"
。输出结果是 {foo: "bar"}
。
2. 多级嵌套属性
如果我们要设置一个多级嵌套属性,我们可以使用类似的方式。例如:
-- -------------------- ---- ------- ----- --- - - ---- - ---- -- - -- ----- -------- - -------------- ----- --------- - ------ ----- ----- - -------------------- --- ---------- - ---- --- ---- - - -- - - ------------ - -- ---- - ----- ---- - --------- ---------------- - ---------------- -- --- ---------- - ----------------- - ----------------------------- - --- - ---------- ----------------- -- -- ----- ----- ----- --------
这里,我们定义了一个嵌套对象 obj
,其中包含了一个空对象 {}
。然后,我们定义了一个字符串变量 propName
,它保存了属性名称 "foo.bar.baz"
,表示我们要设置的属性是 foo
对象的 bar
属性下的 baz
属性。和之前一样,我们还定义了一个字符串变量 propValue
,表示要设置的属性值为 "qux"
。
接下来,我们使用 split()
方法将属性名称按照 .
进行分割,得到一个数组 props
。然后,我们通过一个循环遍历 props
数组,并将每个属性逐级设置为一个空对象。最后,我们使用方括号语法来设置最后一级属性的值为 propValue
。
输出结果是 {foo: {bar: {baz: "qux"}}}
,表示我们成功地设置了 foo
对象的 bar
属性下的 baz
属性的值为 "qux"
。
3. 错误处理
在实际开发中,可能会遇到一些错误情况,例如属性名称不存在、对象不是纯粹的对象等等。为了避免程序出错,我们需要进行一些错误处理。
-- -------------------- ---- ------- -------- ---------------- --------- ---------- - ----- ----- - -------------------- --- ---------- - ---- --- ---- - - -- - - ------------ - -- ---- - ----- ---- - --------- -- ------------------- - -- -------------- - ---- - ---------------- - --- - ---- - ---------------- - --- - - ---------- - ----------------- - ----------------------------- - --- - ---------- - ----- --- - --- ---------------- -------------- ------- ----------------- -- -- ----- ----- ----- --------
这里,我们定义了一个函数 setProperty()
,它接受三个参数:obj
表示要设置属性的对象,propName
表示属性名称,propValue
表示属性值。在函数内部,我们做了一些错误处理:
- 如果属性不存在,则创建一个空对象或空数组。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/25862