2017-03-28 55 views
-1

我很抱歉問這麼簡單的問題,但希望,它也會幫助別人。什麼是'概念平等'(npm中'is-equal'模塊)vs'==='/'=='。 JavaScript的。對象比較。

與「mjackson /期望」播放周圍發現toEqual((值,[消息])函數使用「是相等的」模塊用於比較。

這是使用這種庫的點,什麼是「從概念上平等」,如告訴模塊NPM頁面上,如果我們可以用嚴格的比較‘===’,或簡單的‘==’?

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

+0

用'==='嘗試任何[isequal文檔](https://www.npmjs.com/package/is-equal)的例子。例如'/ a/===/a /'。你會看到的。 –

+0

兩個對象通過引用進行比較。這就是爲什麼'==='和'=='都不適用於涉及對象的測試。 –

+0

@DenysSéguret我試過了。試想一下,也許在幕後還有其他東西,我需要知道使用它。 –

回答

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的比較的差異。