lib/common.js
function isEqual(a, b, stack) {
  var aClass, bClass;
  if (a === b) {
    // Return quickly up front when matched by reference,
    // but be careful about 0 !== -0.
    return a !== 0 || 1 / a === 1 / b;
  }
  aClass = classToString(a);
  bClass = classToString(b);
  if (aClass !== bClass) {
    return false;
  }

  if (isSerializable(a, aClass) && isSerializable(b, bClass)) {
    return objectIsEqual(a, b, aClass, stack);
  } else if (isSet(a, aClass) && isSet(b, bClass)) {
    return a.size === b.size && isEqual(setToArray(a), setToArray(b), stack);
  } else if (isMap(a, aClass) && isMap(b, bClass)) {
    return a.size === b.size && isEqual(mapToArray(a), mapToArray(b), stack);
  } else if (isError(a, aClass) && isError(b, bClass)) {
    return a.toString() === b.toString();
  }

  return false;
}
function isEqual(a, b, stack) {
  var aClass, bClass;
  if (a === b) {
    // Return quickly up front when matched by reference,
    // but be careful about 0 !== -0.
    return a !== 0 || 1 / a === 1 / b;
  }
  aClass = classToString(a);
  bClass = classToString(b);
  if (aClass !== bClass) {
    return false;
  }

  if (isSerializable(a, aClass) && isSerializable(b, bClass)) {
    return objectIsEqual(a, b, aClass, stack);
  } else if (isSet(a, aClass) && isSet(b, bClass)) {
    return a.size === b.size && isEqual(setToArray(a), setToArray(b), stack);
  } else if (isMap(a, aClass) && isMap(b, bClass)) {
    return a.size === b.size && isEqual(mapToArray(a), mapToArray(b), stack);
  } else if (isError(a, aClass) && isError(b, bClass)) {
    return a.toString() === b.toString();
  }

  return false;
}
function isEqual ( a , b , stack ) { var aClass , bClass ; if ( a === b ) { // Return quickly up front when matched by reference, // but be careful about 0 !== -0. return a !== 0 || 1 / a === 1 / b ; } aClass = classToString ( a ) ; bClass = classToString ( b ) ; if ( aClass !== bClass ) { return false ; } if ( isSerializable ( a , aClass ) && isSerializable ( b , bClass ) ) { return objectIsEqual ( a , b , aClass , stack ) ; } else if ( isSet ( a , aClass ) && isSet ( b , bClass ) ) { return a . size === b . size && isEqual ( setToArray ( a ) , setToArray ( b ) , stack ) ; } else if ( isMap ( a , aClass ) && isMap ( b , bClass ) ) { return a . size === b . size && isEqual ( mapToArray ( a ) , mapToArray ( b ) , stack ) ; } else if ( isError ( a , aClass ) && isError ( b , bClass ) ) { return a . toString ( ) === b . toString ( ) ; } return false ; }
Equality helpers Perf
Equality helpers Perf