Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个for循环条件是如何工作的?_Javascript_Loops_For Loop_Eloquent - Fatal编程技术网

Javascript 这个for循环条件是如何工作的?

Javascript 这个for循环条件是如何工作的?,javascript,loops,for-loop,eloquent,Javascript,Loops,For Loop,Eloquent,下面的代码示例来自雄辩的Javascript第4章练习4.3(列表) 为什么下面代码中的for循环在 因为循环是“节点” 您可以更好地使用for..of循环: 首先,我们可以用不同的方式编写程序,这样更容易理解 function listToArray(list) { array = []; for (var i=list;i; i = i.rest) { array.push(i.value); alert(array) } } var listobject

下面的代码示例来自雄辩的Javascript第4章练习4.3(列表)

为什么下面代码中的for循环在 因为循环是“节点”


您可以更好地使用for..of循环:

首先,我们可以用不同的方式编写程序,这样更容易理解

function listToArray(list) {

  array = [];
  for (var i=list;i; i = i.rest)
  {
    array.push(i.value);
   alert(array)
  }
}

var listobject = { value: 10, rest: { value: 20, rest: { value: 30, rest: null } } };

listToArray(listobject);
这里listobject是一个,使用for循环遍历对象文本的值或对象文本的属性

我们可以接受每一行代码

1)
listToArray(listobject)

这是函数调用,这里我们将对象作为参数传递给函数

2) 当执行此代码时,控件转到函数定义

 function listToArray(list) { ...}
这里的列表与我们在函数调用时传递的参数相同

3)
array=[]
在我们声明数组的函数中,最初数组没有元素

4) 接下来是我们的for循环<代码>用于(变量i=列表;列表;i=i.rest)

在循环内部,我们首先分配var i=list

意味着我们要将对象列表的所有属性分配给i

这意味着我们可以通过
i
访问对象的每个属性

例如:

i、 值将得到10

5) 这里的下一个条件语句是
i
,在程序中是node

在本例中,所有术语均具有相同的含义:

i
为null时,条件将为false,在您的情况下,
节点
为null

6)
i=i.rest

它将给出对象的属性或对象的值

示例:
listobject.value将产生10

listobject.rest.value will result 20

listobject.rest.rest.value will result 30
7) 最后是
array.push(i.value)


将这些值添加到我们的数组中,在这个数组中,我们的数组包含10,20,30

我有一个相同的问题:这对我来说并不清楚,我希望对于一本学习JavaScript的书,可以更好地解释它。然后我停下来想了想,带着下面的想法走了


作者的“错误”,IMHO,在于一件简单的事情:不是简单地写
node
,而是他本可以写
node!=null
,这将更加突出和友好(“在节点不为null时执行循环”):并且由于
节点
仅在最后一次迭代中为null-然后返回
false
-它将停止在那里):尝试自己,此操作有效

当节点为空时,它将停止,因为这将返回一个错误值,导致循环终止。感谢您提供详细的答案!我想知道.rest方法是如何工作的?它是否提供listobject.value工作的功能?那么它也允许listobject.rest工作吗?有相关文档吗?@EricPark当您分配var i=list时,列表对象的所有属性都分配给i,然后我们可以使用i.object peropery
listobject.rest.value will result 20

listobject.rest.rest.value will result 30