Eloquent Javascript:练习:一个列表

Edd*_*edt 2 javascript node.js console.log

我正在从一本名为“Eloquent Javascript”的书中学习 JavaScript

我正在尝试解决这里描述的练习:http : //eloquentjavascript.net/04_data.html#h_nSTX34CM1M

我设法确定此代码有效:

function arrayToList(array) {

  var list = null;

  for (var i = array.length - 1; i >= 0; i--)
    list = {
      value: array[i],
      rest: list
    };
  return list;
}

console.log(arrayToList([1, 2, 3]));
Run Code Online (Sandbox Code Playgroud)

结果:{值:1,休息:{值:2,休息:{值:3,休息:空}}}

到目前为止,一切都很好,根据这本书,这是正确的解决方案。但!

当我尝试运行相同的东西但使用更长的数组时,让我们说:

console.log(arrayToList([1, 2, 3, 4, 5]));
Run Code Online (Sandbox Code Playgroud)

结果是:{ value: 1, rest: { value: 2, rest: { value: 3, rest: [Object] } } }

为什么是这样?我的代码错了吗?

jfr*_*d00 5

更长的阵列没有任何问题。 console.log()是一个非标准的、特定于浏览器的实现,一些实现设置了它们将显示多少级对象嵌套的上限。当它们达到该级别时,它们只是显示[Object]而不是递归到它以显示更深的嵌套。

如果您实际上设置了一个断点并在调试器中检查您的变量,您将看到您可以尽可能深入地扩展嵌套级别并查看所有内容。

或者,你可以这样做:

console.log(JSON.stringify(arrayToList([1, 2, 3, 4, 5])));
Run Code Online (Sandbox Code Playgroud)

在使用之前手动将整个内容转换为字符串console.log()