src/equals/context.js
function EqualsContext(value, other, equals, options) {
  if (options == null) {
    options = {};
  }

  /**
   * A reference to {@link Nevis.equals} which can be called within an {@link EqualsComparator}.
   *
   * @private
   * @type {Function}
   */
  this._equals = equals;

  /**
   * The options to be used to test equality for both of the values.
   *
   * @public
   * @type {Nevis~EqualsOptions}
   */
  this.options = {
    filterProperty: options.filterProperty != null ? options.filterProperty : function() {
      return true;
    },
    ignoreCase: Boolean(options.ignoreCase),
    ignoreEquals: Boolean(options.ignoreEquals),
    ignoreInherited: Boolean(options.ignoreInherited),
    ignoreMethods: Boolean(options.ignoreMethods)
  };

  /**
   * The other value to be checked against the <code>value</code>.
   *
   * @public
   * @type {*}
   */
  this.other = other;

  /**
   * The string representation of the values to be tested for equality.
   *
   * This is generated using <code>Object.prototype.toString</code> and is intended to be primarily used for more
   * specific type-checking.
   *
   * @public
   * @type {string}
   */
  this.string = Object.prototype.toString.call(value);

  /**
   * The type of the values to be tested for equality.
   *
   * This is generated using <code>typeof</code> and is intended to be primarily used for simple type-checking.
   *
   * @public
   * @type {string}
   */
  this.type = typeof value;

  /**
   * The value to be checked against the <code>other</code>.
   *
   * @public
   * @type {*}
   */
  this.value = value;
}
function EqualsContext(value, other, equals, options) {
  if (options == null) {
    options = {};
  }

  /**
   * A reference to {@link Nevis.equals} which can be called within an {@link EqualsComparator}.
   *
   * @private
   * @type {Function}
   */
  this._equals = equals;

  /**
   * The options to be used to test equality for both of the values.
   *
   * @public
   * @type {Nevis~EqualsOptions}
   */
  this.options = {
    filterProperty: options.filterProperty != null ? options.filterProperty : function() {
      return true;
    },
    ignoreCase: Boolean(options.ignoreCase),
    ignoreEquals: Boolean(options.ignoreEquals),
    ignoreInherited: Boolean(options.ignoreInherited),
    ignoreMethods: Boolean(options.ignoreMethods)
  };

  /**
   * The other value to be checked against the <code>value</code>.
   *
   * @public
   * @type {*}
   */
  this.other = other;

  /**
   * The string representation of the values to be tested for equality.
   *
   * This is generated using <code>Object.prototype.toString</code> and is intended to be primarily used for more
   * specific type-checking.
   *
   * @public
   * @type {string}
   */
  this.string = Object.prototype.toString.call(value);

  /**
   * The type of the values to be tested for equality.
   *
   * This is generated using <code>typeof</code> and is intended to be primarily used for simple type-checking.
   *
   * @public
   * @type {string}
   */
  this.type = typeof value;

  /**
   * The value to be checked against the <code>other</code>.
   *
   * @public
   * @type {*}
   */
  this.value = value;
}
function EqualsContext ( value , other , equals , options ) { if ( options == null ) { options = { } ; } /**
   * A reference to {@link Nevis.equals} which can be called within an {@link EqualsComparator}.
   *
   * @private
   * @type {Function}
   */ this . _equals = equals ; /**
   * The options to be used to test equality for both of the values.
   *
   * @public
   * @type {Nevis~EqualsOptions}
   */ this . options = { filterProperty : options . filterProperty != null ? options . filterProperty : function ( ) { return true ; } , ignoreCase : Boolean ( options . ignoreCase ) , ignoreEquals : Boolean ( options . ignoreEquals ) , ignoreInherited : Boolean ( options . ignoreInherited ) , ignoreMethods : Boolean ( options . ignoreMethods ) } ; /**
   * The other value to be checked against the <code>value</code>.
   *
   * @public
   * @type {*}
   */ this . other = other ; /**
   * The string representation of the values to be tested for equality.
   *
   * This is generated using <code>Object.prototype.toString</code> and is intended to be primarily used for more
   * specific type-checking.
   *
   * @public
   * @type {string}
   */ this . string = Object . prototype . toString . call ( value ) ; /**
   * The type of the values to be tested for equality.
   *
   * This is generated using <code>typeof</code> and is intended to be primarily used for simple type-checking.
   *
   * @public
   * @type {string}
   */ this . type = typeof value ; /**
   * The value to be checked against the <code>other</code>.
   *
   * @public
   * @type {*}
   */ this . value = value ; }
Contains the values whose equality is to be tested as well as the string representation and type for the value which
can be checked elsewhere for type-checking etc.

A <code>EqualsContext</code> is <b>only</b> created once it has been determined that both values not exactly equal
and neither are <code>null</code>. Once instantiated, {@link EqualsContext#validate} should be called to ensure that
both values share the same type.

@param {*} value - the value to be checked against <code>other</code>
@param {*} other - the other value to be checked against <code>value</code>
@param {Function} equals - a reference to {@link Nevis.equals} which can be called within an {@link EqualsComparator}
@param {?Nevis~EqualsOptions} options - the options to be used (may be <code>null</code>)
@public
@constructor
Contains the values whose equality is to be tested as well as the string representation and type for the value which can be checked elsewhere for type - checking etc .