对象属性(数组)为null除非对象被字符串化?

这似乎是不可能的,所以我敢肯定我已经错过了一些基本知识。

广泛的背景: 我正在对象a的属性之一(“ oldValue”)中创建并存储字符串值数组。该对象内置于函数Y中,然后传递到函数Z中,其中将a.oldValue的值分配给对象b.oldValue。

function Y() {
  let a = {
    newValue: newValue, // ex. ["a", "b", "c"]
    oldValue: oldValue, // ex. ["c", "a", "b"]
  }

  Z(a);
}

function Z(args) {
  let b = {
    newValue: args.newValue, // reliably ["a", "b", "c"]
    oldValue: args.oldValue, // inexplicably "null" unless I JSON.stringify(b)
  }

这是奇怪的事情发生的地方:B.oldValue以某种方式变为null。输入一个字符串数组,出现空值。除非,如果我JSON.stringify B,则出现预期的字符串数组。

在程序的其余流程中,console.log(b)的哪个位置都没有关系,除非字符串化,否则b.oldValue始终为null,在这种情况下,我会看到正确的数组。贯穿所有这些,a.oldValue / arg.oldValue包含预期的数组。

这是我的控制台,显示对象“ a”和“ b”。请注意不同的oldValues:

screenshot of console output

怎么了?