2017-03-28 12 views
-1

私はとても簡単な質問を申し訳なく思っていますが、それは誰かにも役立つでしょう。 「mjacksonが/期待」で遊ん「概念的に等しい」とは(npmの 'is-equal'モジュール)vs '==='/'=='とは何ですか? JavaScript。オブジェクトの比較。

toEqual((値、[メッセージ])機能を比較するためのモジュールを使用して「は、等しい」ことを見出した。

は、そのようなライブラリを使用してのポイントは何であり、何が ' === 『または単純な『』==「我々は、厳密な比較を使用することができれば、モジュールのNPMページに語ったように、』?

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

+0

[isequal documentation](https://www.npmjs.com/package/is-equal)の例を '==='で試してみてください。たとえば '/ a/===/a /'とします。わかるでしょ。 –

+0

2つのオブジェクトが参照によって比較されます。そのため、 '==='と '=='のどちらも、オブジェクトに関するテストには役に立ちません。 –

+0

@DenysSéguret私はそれを試しました。ちょうど、多分、私がそれを使用することを知る必要がある場面の裏に何かがあると考えました。 –

答えて

2

厳密か緩い比較演算子は(===概念的に等しいですおよび==)は、オブジェクトまたは配列を比較したい場合は、両方とも役に立たなくなります。このモジュールでは、配列やオブジェクトのようなものを簡単に再現できます。

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

が、これは常にJavaScriptでfalseになります:

は、例えば、これはすべて真実である

[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でさまざまな種類の比較の違いを気にする必要はありません。

関連する問題