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 != NaNJavaScriptで真です

新しい情報のため編集

更新された情報で、毎回新しい日付オブジェクトをチェックして返すと、同じ日付にはなりません。オブジェクトは、まったく同じオブジェクトを参照している場合にのみ、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()); 

EDIT :現在の作業仕様では、属性File.lastModifiedDateが which is comparison に置き換えられていることに注意してくださいFile.lastModified。2016 年 3 月 18 日現在、Chrome と Firefox でのみサポートされています。

于 2013-03-29T17:40:15.977 に答える