首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么(new () == new ())为false,但(Date() == Date())为真?

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

Stack Overflow用户
提问于 2017-02-01 04:44:12
回答 2查看 2.1K关注 0票数 5

我一直在利用JSFiddle来解决FreeCodeCamp中的问题。当我将日期用作字符串时(即不使用"new"):

案例1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function isSameDay (dtFrom, dtTo) {
    return dtFrom == dtTo
  }

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

  console.log(today)
  console.log(tomorrow)
  console.log(isSameDay(today, tomorrow))

isSameDay返回。但是,当我使用Date作为构造函数(带有“new”)时:

案例2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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))

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

案例3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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))

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

为什么案例2返回false

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-01 04:50:26

使用Date(),只能通过调用JavaScript Date作为构造函数来实例化JavaScript日期对象:将其作为常规函数调用(即不使用新操作符)将返回字符串而不是日期对象。MDN参考

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typeof Date()    //"string"
Date() == Date() //true

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typeof new Date();        //"object"
new Date() === new Date() //false
票数 8
EN

Stack Overflow用户

发布于 2017-02-01 04:59:13

简单地说,案例2返回false,因为是比较两个不同的对象引用(即使两个对象都包含完全相同的属性)。

而在其他情况下,您正在比较日期的toString()值。

请参阅== 抽象平等算法的正式文档中的注3

附注3 相等运算符并不总是传递的。例如,可能有两个不同的字符串对象,每个表示相同的字符串值。 每个String对象将被==操作符视为等于String值,但两个String对象并不相等。例如: 新字符串( "a“) == "a”//true“a”==新字符串(“a”) //true 但 新字符串(“a”) ==新字符串(“a”) //false。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41980177

复制
相关文章
Rust中的模式匹配
在其它一些语言中,let x = 5 之类的语句,仅仅只是赋值语句。但是在rust中,可以换个角度理解,认为5这个值匹配到了x变量。如果觉得有些牵强,可以再来一个示例:
菩提树下的杨过
2021/11/30
1.8K0
Rust中的模式匹配
Swift中的模式匹配
Swift 作为一门现代语言,除去安全,快速等特性之外,还有个明显有别于其他语言的特性,就是巨量细致入微的语言特性。类似iOS API,初学者觉得繁杂,无从下手,但是熟悉之后,绝对能少写不少代码。
小刀c
2022/09/21
1.8K0
less中的匹配模式
首先来看如下的代码,一个 div 元素,分别设置了上下左右的宽度高度和颜色,然后在浏览器中打开发现四个不同的角都是一个小小的三角形如下
程序员 NEO
2023/09/29
2150
less中的匹配模式
Python3.10中的模式匹配
Python 3.10 版本还在开发之中,目前释出的 dev 版本实现了新语法特性 Structural Pattern Matching(PEP 634):可以利用match语句和case语句匹配对象的不同 模式,并应用不同的行为。
杜逸先
2021/06/09
1.5K0
C# 8.0 中的模式匹配
多年来,我们在 C# 中实现了许多功能,不仅改善了代码的性能,更重要的是还提高了代码的可读性。鉴于软件行业的快速发展,语言当然需要与其用户群同步发展。广泛用于 Haskell、Swift 或 Kotlin 等各种编程语言的某些功能,有时也会用于 C#。其中一个功能就是模式匹配,这一概念已经存在很长时间,是 .NET 领域中的许多开发人员一直期待的功能。
AI.NET 极客圈
2019/08/16
1.9K0
Scala 高阶(九):Scala中的模式匹配
本次主要分享Scala中关于模式匹配的内容,Scala中的模式匹配类似于Java中的switch语法,但是Scala在基于Java的思想上补充了特有的功能。
百思不得小赵
2022/12/01
1.5K0
scala 模式匹配的几个模式
Scala 的模式匹配是类似与正则匹配的的模式匹配,但是不仅仅如此,它还可以匹配对象的内在的构建形式.
Tim在路上
2020/08/04
1.2K0
模式匹配
如果在不设置全文搜索的情况下,如何过滤查询结果,您会选择哪种方法?LIKE也许是最容易想到的:
yzsDBA
2021/02/03
9770
模式匹配
匹配操作符(绑定操作符): =~、!~ =~检验匹配是否成功:result= var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回false。
生信补给站
2020/08/06
1.7K0
Scala 的模式匹配
最近开始学习 Scala,相较于学习 Haskell 的过程来看,Scala 真是直观得多,友好得多,更容易上手。以前写过关于从熟悉的 Java 和 JavaScript 来逐步学习 Groovy 和 Haskell 的文章,这以后再来学习 Scala 的话,就可以不断比较了。如果和我一样有 Java 经验的话但是从来没有接触过 Scala 的话,建议先阅读这篇文章,A Scala Tutorial for Java Programmers,一边比较,一边熟悉,同时配套的还有这个,Scala for Java programmers – Joakim Ohlrogge & Enno Runne,Youtube 上的视频,很直观,然后再从 Scala 官网的文档上面逐步涉入。
四火
2022/07/19
9820
Scala 的模式匹配
Rust模式匹配
模式匹配是从函数式编程语言(例如:Haskell,Lisp)吸收而来的,用于为复杂的类型系统提供一个轻松的解构能力。rust使用match来提供模式匹配的功能。mathc类似于其它编程语言中的switch-case,但是远比switch-case强大。match的通用模式如下所示。
zy010101
2023/02/27
1.5K0
有趣的Scala模式匹配
它被称为模式匹配,模式匹配包含了一系列以case关键字开头的分支,每一个分支包含一个模式或者是多个表达式。模式有很多种,例如常量模式('*',1),变量模式(可以匹配任何值),通配模式(又见面了,'_'符号),构造方法模式(类似于样例类的初始化)等等。 用一个例子简单说明就是:
哒呵呵
2018/08/06
1.1K0
Scala 模式匹配
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
王知无-import_bigdata
2019/03/19
8870
朴素的模式匹配算法
子串(又称模式串)的定位操作通常称做串的模式匹配,是串中最重要的操作之一。朴素的匹配方法(BRUTE FORCE 算法,BF 算法)逻辑思路:
用户7737280
2021/11/10
9960
Lua模式匹配
Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配。主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要4000行代码,这比整个Lua标准库加在一起都大。
sunsky
2020/08/20
1.8K0
模式匹配算法
模式匹配算法: 定义一个主串字符串S="goodgoogle",再定义一个模式串字符串T="google",然后依次遍历主串中的字符,判断,模式串是否在主串中存在,这种模式串的定位操作通常称为串的模式匹配 代码: 1 /** 2 * 朴素的模式匹配算法 3 * @author wydream 4 * 5 */ 6 7 public class OrdinaryModel { 8 9 public static void main(String[] args)
说故事的五公子
2019/09/11
9180
Python3.10 中的结构化模式匹配语法
Python 3.10 版本还在开发之中,目前释出的 dev 版本实现了新语法特性 Structural Pattern Matching(PEP 634):可以利用match语句和case语句匹配对象的不同模式,并应用不同的行为。
子润先生
2021/06/18
1.2K0
PHP中的正则表达式及模式匹配
PHP中对于正则处理文本提供了两种方式,一种是PCRE方式(PCRE库是一个实现了与perl 5在语法和语义上略有差异(详见下文)的正则表达式模式匹配功能的函数集. 当前的实现对应于perl 5.005.);另一个是POSIX方式。
大江小浪
2018/07/25
2.9K0
Python的模式匹配库pampy
模式匹配即给定某种模式,用这种模式去检查序列或字符串是否符合这种模式,这种技术在自然语言处理中经常使用。
Python研究所
2022/06/17
6680
点击加载更多

相似问题

如何去除java中的冗余代码?

21

如何在java中重复代码

31

消除特定示例中的代码重复

80

如何去除重复代码,让干净的代码变得快捷?

225

ios示例代码中接口定义重复

11
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文