【问题标题】:Looping through FileList declaration循环通过 FileList 声明
【发布时间】:2016-01-08 09:38:53
【问题描述】:

我正试图围绕一个特定的 for 循环声明来思考,但到目前为止我没有成功。代码 sn-p 允许您读取文件输入并通过 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 循环什么时候进行

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

停止。第二个参数不应该是比较参数,如“===、”等吗?

我可以看到,在每个循环中,它都将 files[i] 中每个对象输入的值分配给变量“f”,但我不明白为什么要这样声明它以及它是如何工作的。 上述和这个有什么区别?

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

【问题讨论】:

  • 这是不好的做法,但for 循环仍然有效:f = files[i] 是返回files[i] 的语句。这用于“比较”或评估。只要该表达式的计算结果为 undefined,它就会停止。

标签: javascript html arrays for-loop


【解决方案1】:

Assigment总是返回赋值的值,所以f = files[i]语句返回的是文件,是真值,直到fileList中没有文件了,然后返回undefined,是假的,循环停下来。

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

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

“条件”是要在每次循环迭代之前评估的表达式。
如果此表达式的计算结果为 true,则执行该语句,如果它的计算结果为 false,就像 undefined 一样,则不执行该语句。

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2015-10-24
    • 2012-12-11
    • 2012-04-29
    • 1970-01-01
    • 2021-07-03
    相关资源
    最近更新 更多