Javascript 为什么中间参数为'时for循环终止;空';?

Javascript 为什么中间参数为'时for循环终止;空';?,javascript,loops,Javascript,Loops,我是javascript的初学者 关于“a列表”练习题中的“提示”之一,我有一个问题来自: 假设我在一个名为listToArray的函数体中循环浏览以下列表: var list = { value: 1, rest: { value: 2, rest: { value: 3, rest: null } } }; 提示建议使用以下循环:for(var node=list;node;node=node.rest){} 解释如下: 你能明白

我是javascript的初学者

关于“a列表”练习题中的“提示”之一,我有一个问题来自:

假设我在一个名为listToArray的函数体中循环浏览以下列表:

var list = {
  value: 1,
  rest: {
    value: 2,
    rest: {
      value: 3,
      rest: null
    }
  }
};
提示建议使用以下循环:
for(var node=list;node;node=node.rest){}

解释如下:

你能明白这是怎么回事吗?循环的每次迭代,节点都指向当前子列表,主体可以读取其value属性以获取当前元素。迭代结束时,节点移动到下一个子列表。当该值为null时,我们已经到达列表的末尾,循环结束

我想知道的是:为什么我们不需要把
节点===null
作为中间参数,就像我一生中见过的所有其他for循环一样?


更新:我知道“null”是假的。为了重申这个问题,也许更简洁一些:为什么我们不需要比较运算符('=')来终止循环?

null
在js中是falsy,因此条件的计算结果为false,终止for循环。比较运算符返回布尔值。您不需要比较运算符,因为您已经有了一个布尔(ish)项。

null
在js中是falsy,因此条件的计算结果为false,终止for循环。比较运算符返回布尔值。您不需要比较运算符,因为您已经有了一个布尔(ish)术语。

为了进一步解释,在JavaScript中查找假值的一个好方法是打开控制台并键入:

null ? true : false

大多数情况下,这些值都是直观的。

为了进一步解释,在JavaScript中查找错误值的一个好方法是打开控制台并键入:

null ? true : false

在大多数情况下,这些值都是直观的。

For循环的
测试表达式可以是任何表达式。它被计算为布尔值,但不一定是比较

比较语法没有什么特别之处
x==y
只是一个表达式,与
1+2
myfunc(blah)
相同。在这种情况下,表达式的值不是一个数字,而是一个布尔值:
true
如果
x
等于
y
(在
=
规则下),则为
false

(您也可以在使用表达式的任何其他位置使用比较;例如:

does_x_equal_y = (x == y)
将变量
does_x_equal_y
设置为
true
false

当计算任意的非比较表达式时,除了
true
false
之外,其值还有许多可能性。但在布尔上下文中,如
for
循环中的测试,所有这些可能性都被解释为等同于一个或另一个。我们将解释为true的非布尔值称为“truthy”,将解释为false的非布尔值称为“falsy”,以区别于实际的布尔值
true
false


在Javascript中,
null
undefined
以及0和空字符串(以及其他一些东西)是虚假的,但其他一切都是真实的。因此,如果
node.next
引用一个对象,它将是真实的,循环将继续;如果它是未定义的/null,它将是falsy,循环将退出。

for
循环的
测试表达式可以是任何表达式。它被计算为布尔值,但不一定是比较

比较语法没有什么特别之处
x==y
只是一个表达式,与
1+2
myfunc(blah)
相同。在这种情况下,表达式的值不是一个数字,而是一个布尔值:
true
如果
x
等于
y
(在
=
规则下),则为
false

(您也可以在使用表达式的任何其他位置使用比较;例如:

does_x_equal_y = (x == y)
将变量
does_x_equal_y
设置为
true
false

当计算任意的非比较表达式时,除了
true
false
之外,其值还有许多可能性。但在布尔上下文中,如
for
循环中的测试,所有这些可能性都被解释为等同于一个或另一个。我们将解释为true的非布尔值称为“truthy”,将解释为false的非布尔值称为“falsy”,以区别于实际的布尔值
true
false


在Javascript中,
null
undefined
以及0和空字符串(以及其他一些东西)是虚假的,但其他一切都是真实的。因此,如果
node.next
引用一个对象,它将是真实的,循环将继续;如果它是未定义的/空的,它将是假,并且循环将退出。< /p>在C或C++中,不必编写<代码>节点= = null < /C> >。在这方面,JavaScript类似于那些语言。在C或C++中,不必编写<代码>节点= = null < /C>。在这方面,JavaScript与这些语言类似。