JavaScript:检查元素列表

时间:2016-07-07 08:30:07

标签: javascript arrays list function

我目前正在使用Marijn Haverbekes出色的书籍和#34; Eloquent JavaScript"来学习JavaScript。现在有一个练习,你必须编写一个返回嵌套列表的第n个元素的递归函数。如果没有这样的元素,该函数应该返回undefined。解决方案如下所示:

function nth(list, n) {
  if (!list)
    return undefined;
  else if (n == 0)
    return list.value;
  else
    return nth(list.rest, n - 1);
}

到目前为止,我觉得一切都很清楚。但是,我并没有真正得到if (!list) {}的确切内容。这种情况究竟如何评估?如果list有元素n

,为什么会这样呢?

完整的练习可以在这里找到: http://eloquentjavascript.net/04_data.html#p_7AnSuS26HF

2 个答案:

答案 0 :(得分:2)

if (!list)

是一种简短的说法

if (list === false || list === 0 || list === '' || list === null || list === undefined || list !== list /* NaN */) ...
当列表短于!list元素时,

n将会发生。

// 4 is larger than the list length here, (2)
// !list will happen
nth({value: 'a', rest: {value: 'b', rest: null}}, 4)
//=> undefined

// 1 is not larger than the list length
// !list will not happen
// instead, n === 0 happens after recursing 1 time
nth({value: 'a', rest: {value: 'b', rest: null}}, 1)
//=> 'b'

答案 1 :(得分:0)

  

但是,我真的不知道if(!list){}的确如何。

它检查list变量是否仍然具有除{false}之外的值,例如nullundefined0false,{{ 1}},NaN""。如果列表有任何falsey值,则返回''

  

为什么如果list有一个元素n?

根据您分享的链接,列表的值为

undefined

表示var list = { value: 1, rest: { value: 2, rest: { value: 3, rest: null } } }; 包含子元素或rest

最终,它会有null这个条件将断言并返回null