在什么情况下我们会在 javascript 中创建新的内存引用?

In what instances do we create new memory references in javascript?

我在这里遇到了一个关于参考与价值的问题 https://gist.github.com/MeeranB/238e085aac8a9abc53ad8a297b03671c 基本上我已经选择了一个 HTMLCollection,并使用 Array.from 方法将它转换为一个数组,但是我有点困惑,因为使用Array.from 方法完全创建了一个新数组,因此我假设将这个新数组存储在内存中的不同地址。

我预计在我的 forEach 循环之后只有 divsWithClassArray 对象会发生变化,而 divsWithClass HTMLCollection 不会发生变化

有人能解释一下这里的背景吗?

/* Assigns divsWithClass HTMLCollection object value to place 1 in 
memory */

const divsWithClass = document.getElementsByClassName("div-class");

//Assigns Array object to place 2 in memory

const divsWithClassArray = Array.from(divsWithClass);

divsWithClassArray.forEach(div => (div.style.color = "green"));

/* How does divsWithClassArray reference the same memory address as 
divsWithClass
if the array.from method creates a new array and we assign it to a new 
variable? */

如果你已经知道在这种情况下

const a = {x: 1};
const b = a;

b 和 a 都引用同一个对象 {x:1} 因此更改 b.x 会更改 a.x - 然后将您的代码视为本质上是这样的

const divsWithClass = document.getElementsByClassName("div-class");
const divsWithClassArray = [];
for (let i = 0; i < divsWithClass.length; i++) {
    divsWithClassArray.push(divsWithClass[i]);
    // or divsWithClassArray[i] = divsWithClass[i]
}

以上是在 Array.from 存在于过去(2015 年之前?)之前我们必须做的事情的一种方式,并产生与

相同的结果
const divsWithClass = document.getElementsByClassName("div-class");
const divsWithClassArray = Array.from(divsWithClass);