Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是';概念上相等';(';等于npm的';模块)与'==='/'==';。JavaScript。对象比较。_Javascript_Node.js_Comparison Operators - Fatal编程技术网

什么是';概念上相等';(';等于npm的';模块)与'==='/'==';。JavaScript。对象比较。

什么是';概念上相等';(';等于npm的';模块)与'==='/'==';。JavaScript。对象比较。,javascript,node.js,comparison-operators,Javascript,Node.js,Comparison Operators,我很抱歉问这么简单的问题,但希望它也能帮助别人 使用“mjackson/expect”发现toEqual((值,[message])函数使用“is equal”模块进行比较 如果我们可以使用严格的比较“==”或简单的“==”,那么使用这样的库的意义是什么?如模块的npm页面所述,什么是“概念上相等” ()如果要比较对象或数组,则严格或松散的比较运算符(分别为==和=)都是无用的。此模块允许您轻松比较数组和对象之类的内容 例如,这是完全正确的: 1 == 1 1 === 1 'abc' == 'a

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

使用“mjackson/expect”发现toEqual((值,[message])函数使用“is equal”模块进行比较

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


()

如果要比较对象或数组,则严格或松散的比较运算符(分别为
==
=
)都是无用的。此模块允许您轻松比较数组和对象之类的内容

例如,这是完全正确的:

1 == 1
1 === 1
'abc' == 'abc'
'abc' === 'abc'
true == true
true === true
null == null
null === null
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中总是错误的:

[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')
而且您经常需要将一个对象与另一个对象进行比较,尤其是在单元测试中。使用
==
==
运算符,您无法将数组或对象与某些预期值进行比较,但使用
等于
可以轻松地进行比较

但是当您使用
让equal=require('is-equal');
时,这一切都是正确的:

1 == 1
1 === 1
'abc' == 'abc'
'abc' === 'abc'
true == true
true === true
null == null
null === null
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中不同类型的比较的差异。

尝试使用
===
的任何示例。例如
/a/==/a/
。您会看到。两个对象是通过它们的引用进行比较的。这就是为什么
==
=
对于涉及对象的测试都不有用的原因。@De我已经试过了。只是想,也许在幕后还有其他的东西,我需要知道如何使用它。