【问题标题】:What is 'conceptually equal' ('is-equal' module from npm) vs '==='/'=='. JavaScript. Objects comparison.什么是“概念上相等”(来自 npm 的“is-equal”模块)与 '==='/'=='。 JavaScript。对象比较。
【发布时间】:2017-03-28 14:20:42
【问题描述】:

我很抱歉问了这么简单的问题,但希望它也会对某人有所帮助。

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

如果我们可以使用严格比较 '===' 或简单的 '==',那么使用此类库的意义何在?如模块的 npm 页面所述,“概念上相等”是什么?

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

【问题讨论】:

  • 尝试使用isequal documentation=== 的任何示例。例如/a/===/a/。你会看到的。
  • 两个对象通过它们的引用进行比较。这就是为什么 ===== 对于涉及对象的测试都没有用处。
  • @DenysSéguret 我试过了。只是想,也许在幕后还有其他东西,我需要知道使用它。

标签: javascript node.js comparison-operators


【解决方案1】:

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

例如,这都是真的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多