什么是 'conceptually equal'(来自 npm 的 'is-equal' 模块)与 '==='/'=='。 JavaScript。对象比较。

What is 'conceptually equal' ('is-equal' module from npm) vs '==='/'=='. JavaScript. Objects comparison.

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

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

使用这样的库有什么意义?'conceptually equal',如模块的 npm 页面所述,如果我们可以使用严格比较“===”,或简单的“==”?

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

如果要比较对象或数组,

严格或宽松的比较运算符(分别为 =====)都是无用的。此模块可让您轻松比较数组和对象等内容。

例如,这都是真的:

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中不同类型比较的区别。