循环通过FileList声明

时间:2015-10-10 14:42:40

标签: javascript html arrays for-loop

我试图围绕一个特定的for循环声明,但到目前为止我没有成功。代码片段允许您读取文件输入并通过for循环遍历所有对象:

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
      output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                  f.size, ' bytes, last modified: ',
                  f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
                  '</li>');
    }
    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script> 

现在,我想知道这是什么时候进行循环

for (var i = 0, f; f = files[i]; i++)

停止。不应该将第二个参数作为比较参数,例如&#34; ===,&lt; ,&gt; &#34;等等 ?

我可以看到,在每个循环中,它分配给变量&#39; f&#39;在文件[i]中输入的每个对象的值,但我不知道为什么它被声明为什么以及它是如何工作的。 上述与此之间有什么区别?

var f;
for (var i = 0;i<files.length; i++) {
      f = files[i];
}

1 个答案:

答案 0 :(得分:4)

Assigment总是返回指定的值,因此语句f = files[i]返回文件,这是一个真值,直到fileList中没有更多文件,然后它返回undefined,这是假的,循环停止。

它停止的原因是因为for循环由三个表达式组成

for ([initialization]; [condition]; [final-expression]) { statement

&#34;条件&#34;是一个表达式,在每次循环迭代之前 进行评估  如果此表达式的计算结果为true,则执行该语句,如果计算结果为false,则undefined将执行该语句。