npm install cocotte-comparecocotte-compare
===============
人間らしい比較を行う関数を提供します
javascriptの等価演算子では==と===が存在しますが、どちらもテストに不向きな場面があります
人間らしい演算子を行うcocotte-compareを利用する事で、テストを簡単に行う事ができます
例えば、{a: 1} == {a: 1}としても {a: 1} === {a: 1} としても結果はfalseです compare({a: 1}, {a: 1})はtrueを返すことができます
``
var compare = require('cocotte-compare');
var target1 = {
a: 1,
b: 2,
c: [1, 2, 3]
};
var target2 = {
b: 2,
c: [1, 2, 3],
a: 1
};
// 自己循環
target1.d = target1;
target2.d = target2;
// クロス循環
target1.e = target2;
target2.e = target1;
console.log(compare(target1, target2)); // true
`
{Boolean} compare({Mixed} value, {Mixed} compareTo, {Number} level)
+ value: 比較する値
+ compareTo: 比較対象の値
+ level: ===の比較に切り替える階層(省略可能)
levelを設定すると、オブジェクトのプロパティや配列の要素は===で比較することができます
例えば、同じオブジェクトを順にもつ配列などを比較することができます
``
var x = {};
var y = {};
console.log(compare([x], [y])); // true
console.log(compare([x], [y], 1)); // false
+ キャストは行いません。compare(1, '1')はfalseですvalueOf
+ プリミティブは値を比較します
+ メソッドが自身を返さないオブジェクトはその値同士を比較し、プロパティの比較を行いませんtrue
+ オブジェクトの比較は、すべてのプロパティに対しルールを適用して一致する必要があります
+ プロパティの追加順序は無視します
+ 配列は、順序が一致し、それぞれの要素にルールを適用してすべてである場合にtrueです0
+ 自己循環参照にも対応しています
+ と-0との比較はtrueですnew
+ を使用して作成されたString,Number,Booleanとプリミティブの値との比較はfalseですmessage
+ エラーオブジェクトは、プロトタイプとプロパティの値が一致した場合にtrueですtrue
+ 関数は参照先が同じである場合にのみですfalse
+ プロパティのenumerable,writable,configurableの設定が異なる場合もですfalse
+ プロパティのget,setはたとえコードが一緒でも関数が一致しない場合はですfalse
+ preventExtensions,seal,freezeされたオブジェクトとされていないオブジェクトとの比較はです===`で比較します
+ level以上の階層の値は