function areEqual(a: any, b: any): boolean {
  const aStack = aStackPool.length ? aStackPool.pop() : [];
  const bStack = bStackPool.length ? bStackPool.pop() : [];
  const result = eq(a, b, aStack, bStack);
  aStack.length = 0;
  bStack.length = 0;
  aStackPool.push(aStack);
  bStackPool.push(bStack);
  return result;
}
function areEqual(a: any, b: any): boolean {
  const aStack = aStackPool.length ? aStackPool.pop() : [];
  const bStack = bStackPool.length ? bStackPool.pop() : [];
  const result = eq(a, b, aStack, bStack);
  aStack.length = 0;
  bStack.length = 0;
  aStackPool.push(aStack);
  bStackPool.push(bStack);
  return result;
}
function areEqual ( a : any , b : any ) : boolean { const aStack = aStackPool . length ? aStackPool . pop ( ) : [ ] ; const bStack = bStackPool . length ? bStackPool . pop ( ) : [ ] ; const result = eq ( a , b , aStack , bStack ) ; aStack . length = 0 ; bStack . length = 0 ; aStackPool . push ( aStack ) ; bStackPool . push ( bStack ) ; return result ; }
Checks if two values are equal. Values may be primitives, arrays, or objects.
Returns true if both arguments have the same keys and values.

@see http://underscorejs.org
@copyright 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
@license MIT
Checks if two values are equal . Values may be primitives arrays or objects . Returns true if both arguments have the same keys and values .
A is equal to b