什么是概念上相同的' (&n =等于&n;'模块来自npm)vs' ===' /' =='。 JavaScript的。对象比较。

时间:2017-03-28 14:20:43

标签: javascript node.js comparison-operators

我很抱歉问这么简单的问题,但希望,它也会帮助别人。

玩&mjackson / expect'发现toEqual((value,[message])函数使用' is-equal'模块进行比较。

如果我们可以使用严格的比较' ===',那么在模块的npm页面上使用这样的库有什么意义呢?概念上是平等的'或简单的' =='?

https://www.npmjs.com/package/is-equal

1 个答案:

答案 0 :(得分:2)

如果要比较对象或数组,则严格或松散的比较运算符(分别为=====)都无用。该模块可让您轻松比较数组和对象等内容。

例如,这是真的:

1 == 1
1 === 1
'abc' == 'abc'
'abc' === 'abc'
true == true
true === true
null == null
null === null

但在JavaScript中这总是错误的:

[1, 2, 3] == [1, 2, 3]
[1, 2, 3] === [1, 2, 3]
{a: 1, b: 2} == {a: 1, b: 2}
{a: 1, b: 2} === {a: 1, b: 2}
/.*/ == /.*/
/.*/ === /.*/
new Date('2017') == new Date('2017')
new Date('2017') === new Date('2017')

并且您经常需要将一个对象与另一个对象进行比较,尤其是在单元测试中。使用=====运算符,您无法将数组或对象与某些预期值进行比较,但使用is-equal可以轻松地比较它们。

但是当你使用let equal = require('is-equal');时 - 这都是真的:

equal(1, 1)
equal('abc', 'abc')
equal(true, true)
equal(null, null)
equal([1, 2, 3], [1, 2, 3])
eqial({a: 1, b: 2}, {a: 1, b: 2})
equal(/.*/, /.*/)
equal(new Date('2017'), new Date('2017'))

并且您不需要关心JavaScript中不同类型的比较差异。