1

似乎下面的代码应该返回一个 true,但它返回 false。

这有什么意义?这样对吗?

我也在 Chrome 和 Firefox 上进行了测试。两者都返回false。

测试代码

console.log(file.lastModifiedDate == file.lastModifiedDate); //returns false

W3C 文件 API 规范

interface File : Blob {
  readonly attribute DOMString name;
  readonly attribute Date lastModifiedDate;
};

完整的测试代码

http://playground.html5rocks.com/#read_file_content_as_text

// Content section used alot

var content = document.getElementById('content');

if (!window.FileReader) {
  content.innerHTML = "<p>This browser doesnt support the File API</p>";
} else {
  // Page Layout
  content.innerHTML =
    '<p>Pick a text file or drag one into this area <br> <input type="file" id="file" /></p>' +
    '<b>Content:</b> <br><br> <pre id="file-content"></pre>' +
    '</p>';

  // Input handler
  document.getElementById('file').onchange = function() {
    readFileAsText(this.files[0]);
  };

  // Drag and drop methods
  content.ondragover = function(e) {
    e.preventDefault();
    return false;
  };
  content.ondrop = function(event) {
    e.stopPropagation();
    readFileAsText(event.dataTransfer.files[0]);
    return false;
  };

  function readFileAsText(file) {
    var reader = new FileReader();
    reader.readAsText(file);
    reader.onload = function(event) {
      document.getElementById('file-content').textContent = 
        event.target.result;
    };

    console.log(file.lastModifiedDate == file.lastModifiedDate); //returns false

    reader.onerror = function() {
      document.getElementById('file-content').innerHTML = 'Unable to read ' + file.fileName;
    };
  }
}​
4

2 回答 2

4

如果file.lastModifiedDate是 NaN,就会发生这种情况。

NaN != NaN在javascript中是真的

因新信息而编辑

使用更新的信息,如果它每次都检查并返回一个新的日期对象,它就不会是同一个日期。只有在引用完全相同的对象时,对象才在 javascript 中相等。即使它们具有所有相同的属性,它们也不会被视为相等。如果每次都检查日期,它将返回不同的对象,而不是相同的对象,您将得到该结果。

Javascript 没有内置的 "deep-equals" ,但您可以查看这个问题以获得一些指导。

于 2013-03-29T16:43:10.153 回答
3

来自:https ://www.w3.org/TR/2013/WD-FileAPI-20130912/#dfn-lastModifiedDate

获取时,如果用户代理可以使此信息可用,则必须返回一个新的 Date 对象,该对象初始化为文件的最后修改日期。

我认为这意味着每次你得到lastModifiedDate它都会得到一个新Date对象。

比较是在对象引用而不是值上进行的。

要比较值,您可以执行以下操作:

 console.log(file.lastModifiedDate.getTime() == file.lastModifiedDate.getTime()); 

编辑:请注意,在当前的工作规范中,该属性File.lastModifiedDate被替换File.lastModified为可比较的。截至 2016 年 3 月 18 日,仅 Chrome 和 Firefox 支持。

于 2013-03-29T17:40:15.977 回答