为什么(new Date()== new Date())为false,但是(Date()== Date())是真的?

Ale*_*son 3 javascript equality date

我一直在乱搞JSFiddle来解决FreeCodeCamp中的这个问题.当我使用Date作为字符串时(即没有"new"):

情况1:

function isSameDay (dtFrom, dtTo) {
    return dtFrom == dtTo
  }

  let today = Date()
  let tomorrow = Date()

  console.log(today)
  console.log(tomorrow)
  console.log(isSameDay(today, tomorrow))
Run Code Online (Sandbox Code Playgroud)

isSameDay返回true.但是当我使用Date作为构造函数时(使用"new"):

案例2:

function isSameDay (dtFrom, dtTo) {
    return dtFrom == dtTo
  }

  let today = new Date()
  let tomorrow = new Date()

  console.log(today)
  console.log(tomorrow)

  console.log(isSameDay(today, tomorrow))
Run Code Online (Sandbox Code Playgroud)

isSameDay返回false.但是(!),当我添加一元运算符"+"时:

案例3:

function isSameDay (dtFrom, dtTo) {
    return dtFrom == dtTo
  }

  let today = + new Date()
  let tomorrow = + new Date()

  console.log(today)
  console.log(tomorrow)

  console.log(isSameDay(today, tomorrow))
Run Code Online (Sandbox Code Playgroud)

isSameDay返回true.我理解案例1和案例3返回true,因为它们只是相同的字符串和相同的毫秒值.

为什么案例2返回false

Gib*_*boK 7

使用时Date(),只能通过调用JavaScript Date作为构造函数来实例化JavaScript Date对象:将其作为常规函数(即没有new运算符)调用将返回字符串而不是Date对象.MDN参考.

typeof Date()    //"string"
Date() == Date() //true
Run Code Online (Sandbox Code Playgroud)

使用构造函数作为new Date(),每个实例都是唯一的(相同构造函数的两个实例仍然彼此不同),这就是它们在比较时不相等的原因.

typeof new Date();        //"object"
new Date() === new Date() //false
Run Code Online (Sandbox Code Playgroud)

  • @tobuslieven抱歉,但是'var a ='a'; var b ='b'; a === b`等于false. (2认同)