如何在 JavaScript 中通过字符串名称设置对象属性(包括嵌套属性)

阅读时长 4 分钟读完

在开发过程中,我们经常需要动态地设置一个对象的属性。有时候,这个属性的名称是固定的,我们可以直接使用点语法(.)或方括号语法([])来设置。但是,在某些情况下,属性的名称是不确定的,它可能是一个变量或者从其他地方获取的数据。这时,我们需要一种方法来根据字符串名称设置对象属性。

1. 基础用法

我们可以使用方括号语法来动态设置对象的属性。例如:

这里,我们定义了一个空对象 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

纠错
反馈