首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用jasmine .toEqual比较两个不同的对象,一个对象是空的,另一个对象有一个键是一个符号,为什么它说它们是相等的?

Jasmine是一个流行的JavaScript测试框架,它提供了一组用于编写和执行测试的函数和工具。其中,.toEqual是Jasmine提供的一个匹配器(matcher),用于比较两个对象是否相等。

在给定的问答内容中,我们有两个不同的对象进行比较。一个对象是空的,另一个对象有一个键是一个符号。根据JavaScript的规则,当使用=====运算符比较两个对象时,它们只有在引用相同的对象时才会被认为是相等的。然而,Jasmine的.toEqual匹配器使用了深度比较(deep comparison)的方式来判断两个对象是否相等。

深度比较会递归地比较两个对象的属性和值,而不仅仅是比较它们的引用。在这种情况下,尽管一个对象是空的,另一个对象有一个键是一个符号,但它们的结构是不同的,因此深度比较会认为它们是不相等的。

然而,Jasmine的.toEqual匹配器在比较对象时,会将符号键转换为字符串键,然后再进行比较。这意味着在这个特定的情况下,.toEqual匹配器会忽略符号键的类型差异,将其视为普通的字符串键。因此,尽管一个对象是空的,另一个对象有一个键是一个符号,但由于它们的键都被转换为字符串并且相等,所以.toEqual匹配器会认为它们是相等的。

总结起来,使用Jasmine的.toEqual匹配器比较两个不同的对象时,一个对象是空的,另一个对象有一个键是一个符号。尽管它们的结构不同,但由于.toEqual匹配器会将符号键转换为字符串键并进行比较,所以它们被认为是相等的。

关于Jasmine的更多信息和使用示例,可以参考腾讯云的Jasmine介绍页面:Jasmine介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Angular2 之 单元测试

它是这个测试模块唯一的声明组件。 本章后面的测试程序有更多声明组件,它们中间的一些导入应用模块,这些模块有更多的声明组件。 一部分或者全部组件可能有外部模板和CSS文件。...测试程序像宿主组件那样来描述它。 heroEl是个DebugElement,它代表了英雄所在的。 测试程序用"click"事件名字来调用triggerEventHandler。...第二个参数是传递给事件处理器的事件对象。 ---- 自己遇到的坑儿 下面都是自己在实际的编写单元测试时,真实遇到的问题,自己真的是在这上面花费了很多时间啊!!!为什么没有说花冤枉时间呢?...---- 多次调用同一个异步方法 相信大家对这段单元测试的代码很熟悉,这里就是模拟多次调用同一个方法时,返回不同的值。 这里是同步方法的模拟返回数据,那么异步方法同样可以。...其实不是代码写的有问题,是单元测试写的有有问题,在第一个expect去判断的时候,第二个 service.getRelatedList已经执行完了,所以才会出错。

5.5K20
  • JavaScript字符串间的比较

    字符串和其他对象比较大小 字符串和其他对象进行比较,大体要遵循下面的这些考量: 两个操作数都是数值,则进行数值比较 两个操作数都是字符串,则比较两个字符串对应的字符编码值 两个操作数有一个是数值,则将另一个转换为数值...,则通过Number()函数将字符串转换为数值 如果一个操作值是对象,另一个不是,则调用对象的valueOf()方法,得到的结果按照前面的规则进行比较 null与undefined是相等的;avaScript...的设计者希望用null表示一个空的值,而undefined表示值未定义。...如果一个操作值为NaN,则相等比较返回false(NaN 本身也不等于 NaN)唯一能判断NaN的方法是通过isNaN()函数:isNaN(NaN); // true 如果两个操作值都是对象,则比较它们是不是指向同一个对象...也就是说,程序运行到判断对象是否相等之前,必须确认二者是否都’存在’。

    9.4K90

    equals() ? ==? hashCode()? 今天就把你们都认识清楚

    由此可见'=='在比较的对象是引用类型时,是对栈中的地址值进行比较的。...=适用所有对象,但是这两个操作符通常在比较对象的时候会出问题: 在这里==和!=比较的是对象的引用。尽管对象的内容相同,但是对象的引用却是不同的,说以n1==n2是false。...如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。...如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法 不要求 一定生成不同的整数结果。...这样,当你用其中的一个作为键保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一个作为键值去查找他们的时候 ,则根本找不到。

    45050

    Python 哈希(hash) 散列

    默认情况下,作为用户定义类实例的对象是可以 hasable 的。它们都比较 unequal (除了它们自己) ,它们的 hash 值是从它们的 id ()派生出来的。...在一般的数据结构教材中,散列表里的单元通常叫作表元(bucket)。 在 dict 的散列表当中,每个键值对都占用一个表元,每个表元都有两 个部分,一个是对键的引用,另一个是对值的引用。...如果是自定义 对象调用 hash() 的话,实际上运行的是自定义的 __hash__。如 果两个对象在比较的时候是相等的,那它们的散列值必须相等,否 则散列表就不能正常运行了。...用元组取代字典就能节省空间的原因有两个: 避免了散列表所耗费的空间 无需把记录中字段的名字在每个元素里都存一遍。 记住我们现在讨论的是空间优化。...,它们是相等的;但是如果在 key1 和 key2 被添加到字典里的过程中有冲突发生的话,这两个键出现在字典里的顺序是不一样 的。

    2.3K20

    protractor量角器软件_flashback啥意思

    预备环境 protractor 是一个 Node.js 程序,为了运行 protractor ,你首先需要 Node 环境。你还应该检查一下 Node 的版本,它应该在 v0.10.0 以上。...('Super Calculator'); }); }); describe 和 it 是 Jasmine 测试框架的语法格式。...}); }); 这里,我们使用全局的 element 函数和 by 对象,它们也是 protractor 创建的函数,element 函数用来在页面中定位 HTML 元素,函数返回一个 ElementFinder...element 需要一个参数,一个选择器参数,用来描述如何找到元素,by 对象用来创建选择器,这里我们使用了三种类型的选择器。...protractor conf.js 你应该看到页面中输入了两个数字,等待结果显示出来。由于结果是 3 ,而不是 5,我们的测试失败。修复这个测试,然后重新运行它。

    1.9K40

    对 React 组件进行单元测试

    比如一个方法可能依赖另一个方法的执行,而后者对我们来说是透明的。好的做法是使用stub 对它进行隔离替换。这样就实现了更准确的单元测试。...,用一个虚拟的对象来创建以便测试的测试方法 广义的讲,以上的 spy 和 stub 等,以及一些对模块的模拟,对 ajax 返回值的模拟、对 timer 的模拟,都叫做 mock 。...实际上,只要先记这住四个单词,就足以应付大多数测试情况了: describe: 定义一个测试套件 it:定义一个测试用例 expect:断言的判断条件 toEqual:断言的比较结果 describe(...,我们指定了测试的“根目录”,配置了覆盖率(内置的istanbul)的一些格式,并将原本在webpack中对样式文件的引用指向了一个空模块,从而跳过了这一对测试无伤大雅的环节 //NullModule.jsmodule.exports...一些模块中可能耦合了对 window.xxx 这类全局对象的引用,而完全去实例化这个对象可能又牵扯出很多其他的问题,难以进行;此时可以见招拆招,只模拟一个最小化的全局对象,保证测试的进行: //fakeAppFacade.jsvar

    4.3K40

    == 与equals和hashCode与equals

    == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)。...equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况: 情况1:类没有覆盖 equals() 方法。...一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。...散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!...hashCode()与equals()的相关规定 如果两个对象相等,则hashcode一定也是相同的 两个对象相等,对两个对象分别调用equals方法都返回true 两个对象有相同的hashcode值,

    84720

    如何编写出高质量的 equals 和 hashcode 方法?

    equals 方法:Object 类中的 equals 方法用于检测一个对象是否等于另一个对象,在 Object 类中,这个方法将判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的...hashcode 方法:用来获取散列码,散列码是由对象导出的一个整数值,散列码是没有规律的,如果 x 和 y 是两个不同的对象,那么 x.hashCode() 与 y.hashCode() 基本上不会相同...为什么需要重写 equals 方法和 hashcode 方法,我想主要是基于以下两点来考虑: 1、我们已经知道了 Object 中的 equals 方法是用来判断两个对象的引用是否相同,但是有时候我们并不需要判断两个对象的引用是否相等...2、如果两个对象根据 equals(Object) 方法比较是相等的,那么在两个对象上调用 hashCode 就必须产生的结果是相同的整数。...3、如果两个对象根据 equals(Object) 方法比较并不相等,则不要求在每个对象上调用 hashCode 都必须产生不同的结果。

    84360

    java集合详解完整版(超详细)「建议收藏」

    实现唯一性的比较过程:存储元素首先会使用hash()算法函数生成一个int类型hashCode散列值,然后和所存储的元素的hashCode值比较,如果hashCode不相等,则所存储的两个对象一定不相等...;如果比较的内容不相等,那么就是不同的对象,就该存储了,此时就要采用哈希的解决地址冲突算法,在当前hashCode值处类似一个新的链表, 在同一个hashCode值的后面存储存储不同的对象,这样就保证了元素的唯一性...(六)LinkedHashMap和HashMap,TreeMap对比 Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写...Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。...方法返回true 两个对象有相同的hashcode值,它们也不一定是相等的 综上,equals方法被覆盖过,则hashCode方法也必须被覆盖 hashCode()的默认行为是对堆上的对象产生独特值。

    1K20

    Java Object类 和 String类 常见问答 6k字+总结

    题目总结 2.1 == 和 equals 的区别? == :如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象 的地址值是否相等。...一般会选择重写此方法,来比较两个对象的内容是否相等,相等则返回 true。 2.2 如何比较两个对象内容是否相同?...一般会选择重写此方法,来比较两个对象的内容是否相等,相等则返回 true。 总结:单考虑目的两者是差不多的,都是用来对比两个对象是否相等一致。...如果大量内容都是用 equals() 去比对,效率显然是比较低的,所以每次比对之前都去使用 hashCode() 去对比,如果返回的 hashCode 不同,代表两个对象肯定不相同,就可以直接返回结果了...> StringBuffer StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作

    41120

    如何编写出高质量的 equals 和 hashcode 方法?

    :Object 类中的 equals 方法用于检测一个对象是否等于另一个对象,在 Object 类中,这个方法将判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的。...hashcode 方法:用来获取散列码,散列码是由对象导出的一个整数值,散列码是没有规律的,如果 x 和 y 是两个不同的对象,那么 x.hashCode() 与 y.hashCode() 基本上不会相同...为什么需要重写 equals 方法和 hashcode 方法,我想主要是基于以下两点来考虑: 1、我们已经知道了 Object 中的 equals 方法是用来判断两个对象的引用是否相同,但是有时候我们并不需要判断两个对象的引用是否相等...2、如果两个对象根据 equals(Object) 方法比较是相等的,那么在两个对象上调用 hashCode 就必须产生的结果是相同的整数。...3、如果两个对象根据 equals(Object) 方法比较并不相等,则不要求在每个对象上调用 hashCode 都必须产生不同的结果。

    62050

    Atom飞行手册翻译: 3.8 编写spec

    编写 spec 我们已经通过一些例子查看并编写了一些spec,现在是更进一步查看spec框架本身的时候了。确切地说,你在Atom中如何编写测试呢? Atom使用Jasmine作为spec框架。...任何新的功能都要拥有specs来防止回归。 创建新的 spec Atom的spec和包的spec都要添加到它们各自的spec目录中。下面的例子为Atom核心创建了一个spec。...添加一个或多个describe方法 describe方法有两个参数,一个描述和一个函数。以when开始的描述通常会解释一个行为;而以方法名称开头的描述更像一个单元测试。...it方法 it方法也有两个参数,一个描述和一个函数。...了解预期(expectation)的最好方法是阅读Jasmine的文档。

    78730

    深度剖析Python字典和集合

    可散列的数据类型 在Python词汇表中,关于可散列类型的定义有这样一段话: “如果一个对象是可散列的,那么在这个对象的生命周期中,它的散列值是不变的,而且这个对象需要实现__hash__()方法。...另外可散列对象还要有__eq__()方法,这样才能跟其他键做比较。如果两个可散列对象是相等的,那么它们的散列值一定是一样的。” 重点是散列值不变!...它返回的是一个只读的视图,会跟随源字典动态展示,但是无法对源字典做出改动。...散列表其实是一个稀疏数组(总是有空白元素的数组称为稀疏数组),散列表里的单元叫作表元,在dict的散列表中,每个键值对占用一个表元,每个表元有两个部分,一个是对键的引用,另一个是对值的引用,因为所有表元的大小一致...如果两个对象在比较的时候是相等的,那么它们的散列值必须相等,否则散列表就不能正常运行了: >>> a = 1 >>> b = 1 >>> a == b True >>> hash(a) 1 >>> hash

    1.6K00

    Java面试题-集合框架篇三

    一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。...==和equal区别也是考烂了的题,这里说一下: ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用...equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。...比如:两条new语句创建了两个对象,然后用a/b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的...Map 提供了一个更通用的元素存储方法。 Map集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。 它们都有增删改查的方法。

    54930

    java面试强基(7)

    散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!(可以快速找到所需要的对象) 为什么要有 hashCode? ​...其实, hashCode() 和 equals()都是用于比较两个对象是否相等。 ​ 那为什么 JDK 还要同时提供这两个方法呢? ​...这是因为两个对象的hashCode 值相等并不代表两个对象就相等。 ​ 那为什么两个对象有相同的 hashCode 值,它们也不一定是相等的? ​...也就是说如果 equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。 ​...总结 : equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。 两个对象有相同的 hashCode 值,他们也不一定是相等的(哈希碰撞)。

    33621

    探索对象的奥秘:解析Java中的Object类,有两下子!

    Object类中包含了一些基本的属性和方法,用于操作对象.equals()方法  equals()方法用于比较两个对象是否相等。...如果两个对象相等,即它们的引用指向同一个对象,或者它们的值相等,则equals()方法返回true,否则返回false。对于自定义的类,需要重写equals()方法以实现自定义的比较逻辑。...有想法的同学可以仔细去研读下。2. equals()方法  equals()方法是Object类中最重要的方法之一。它用于比较两个对象是否相等。...如果你不重新实现hashCode()方法,它将返回对象的默认哈希码,该哈希码是根据对象的内存地址计算得出的。所以,如果两个对象的引用地址不同,它们的哈希码也会不同。  ...如果两个对象不相等,它们的哈希码不需要相等。但是,如果哈希码相等,则需要调用equals()方法来检查这两个对象是否真的相等。

    20031

    硬核原创|Java 面试题全梳理

    它只能比较对象,它表示的是引用双方的值是否相等。所以记住,并不是说 == 比较的就是引用是否相等,equals 比较的就是值,这需要区分来说的。...如果引用相等的话,直接返回 true ,不相等的话继续下面的判断 然后再判断被比较的对象是否是 String 的实例,如果不是的话直接返回 false,如果是的话,再比较两个字符串的长度是否相等,如果长度不想等的话也就没有比较的必要了...;长度如果相同,会比较字符串中的每个 字符 是否相等,一旦有一个字符不相等,就会直接返回 false。...如果只重写 equals 方法而不重写 hashcode 方法,很可能会造成两个不同的对象,它们的 hashcode 也相等,造成冲突。...HashMap 的长度为什么是 2 的幂次方 这道题我想了几天,之前和群里小伙伴们探讨每日一题的时候,问他们为什么 length%hash == (n - 1) & hash,它们说相等的前提是 length

    38330
    领券