0.5.1 • Published 10 years ago

cocotte-compare v0.5.1

Weekly downloads
2
License
MIT
Repository
github
Last release
10 years ago

cocotte-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です
  • プロパティのenumerable,writable,configurableの設定が異なる場合もfalseです
  • プロパティのget,setはたとえコードが一緒でも関数が一致しない場合はfalseです
  • preventExtensions,seal,freezeされたオブジェクトとされていないオブジェクトとの比較はfalseです
  • level以上の階層の値は===で比較します
0.5.1

10 years ago

0.5.0

10 years ago

0.4.0

11 years ago

0.3.1

11 years ago

0.3.0

11 years ago

0.2.1

11 years ago

0.1.2

11 years ago

0.1.1

11 years ago

0.1.0

11 years ago