[Eloquent JavaScript书https://eloquentjavascript.net/04_data.html中的练习遇到了麻烦。任务是从数组中创建列表。实际上我在理解本书提出的清单概念时遇到了麻烦。这就是说的话。
对象,作为通用值blob,可用于构建所有种类数据结构。常见的数据结构是列表(不要与数组混淆)。列表是一组嵌套的对象,其中第一个对象引用第二个对象,第二个对象引用第三,依此类推。
let list = { value: 1, rest: { value: 2, rest: { value: 3, rest: null } } };
关于列表的一件好事是,它们可以共享部分内容结构体。例如,如果我创建两个新值:
{value: 0, rest: list}
和{value: -1, rest: list}
(列表引用绑定,它们都是独立的列表,但它们共享构成最后三个要素的结构。原始清单仍然是有效的三元素列表。
我不明白他是如何创建两个新值的,它们是如何独立列出的。如果有人可以提供良好的代码示例,这将非常有帮助。我只是初学者。
他是如何创建两个新值的?
只需创建两个新变量并为其分配值:
const list = {
value: 1,
rest: {
value: 2,
rest: {
value: 3,
rest: null
}
}
};
const first = { value: 0, rest: list };
const second = { value: -1, rest: list };
console.log(first)
console.log(second)
它们如何是独立列表?
这些只是两个不同的变量,每个主题都有其自己的价值-因此,它们是独立的。在这种情况下,由于它们具有数据结构,因此可以称为独立lists。而且,它们从list
变量共享相同的结构。这意味着,如果我们更改list
变量中的某些内容,将影响first
和second
列表中包含对list
变量的引用的部分。反之亦然,如果我们在first
或second
中进行更改,它也会影响list
。
希望有帮助:)
创建两个数组时,例如:
const a = [0];
const b = [-1];
这两个数组彼此独立-a
被分配了自己的数组实例,b
也被分配了自己的数组实例。这同样适用于对象(实际上,数组本身就是对象)。如果您有两个这样的对象:
const a = {value: 0, rest: null};
const b = {value: -1, rest: null};
每个变量都有自己的对象字面量。独立对象本身充当其自己的独立列表。
在本书给出的示例中,您仍然具有两个独立创建的列表的情况(因为每个对象字面量代表一个新列表),但是rest
属性的值是对另一个对象的引用( 3rd)list
。
const a = {value: 0, rest: list};
const b = {value: -1, rest: list};
所以a
和b
是它们自己的列表实例,但是它们都有一个引用,它们指向先前创建的同一list
对象。