初学 JS,请教一个小问题

2016-09-10 02:28:57 +08:00
 tyfulcrum

在做这道题的时候,我实现的题中最后一个函数 nth 的返回结果总是 undefined ,明明在即将返回值的地方打 log 输出的都是正确的值。

代码如下:

function arrayToList(para) {
    if (para[0] !== undefined) { 
        var list = {
            value: para[0],
            rest: null
        };

        for (var i = 1, j = list;
            i < para.length; ++i , j = j.rest) {
                j.rest = {
                    value: para[i],
                    rest: null
                };
            }
        return list;
    }
}

function nth(list, n) {
    if (list !== undefined || list !== null) {
        if (n === 0) {
            // 此处打 log 结果依然为 list.value 的值
            return list.value;
        }
        else {
            nth(list.rest, --n);
        }
    }
}
console.log(nth(arrayToList([10, 20, 30]), 1)); //此处输出为 undefined
1310 次点击
所在节点    问与答
5 条回复
binux
2016-09-10 02:34:45 +08:00
```
else {
return nth(list.rest, --n);
}
```
tyfulcrum
2016-09-10 02:36:28 +08:00
@binux 多谢,把自己递归晕了 Orz
littlepanzh
2016-09-10 12:48:41 +08:00
我读书少……
if (list !== undefined || list !== null)
这个 if 有什么卵用吗?
tyfulcrum
2016-09-10 19:15:15 +08:00
@littlepanzh 原意是怕传进来的不是预期的类型导致运行时错误。请问这种情况是用 try catch 更好么?我初学不知道动态类型语言在这种情况下的惯例。
littlepanzh
2016-09-10 19:19:02 +08:00
@tyfulcrum 应该用&&不是||,你这个 if 什么条件都会进去的,根本起不到任何作用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/305210

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX