Check whether two values are equal by value, however they are stored: two separately made arrays or objects with the
same contents are equal, while two references only need to be the same when the value is a function.
Primitives are equal when they are the same value (and NaN equals NaN)
Arrays are equal when they have the same elements in the same order
Objects are equal when they have the same prototype (the same kind of object) and the same own properties with
equal values, the order of the properties does not matter
Dates, regular expressions, Maps and Sets are compared by what they hold
Circular references are handled: a pair of objects which is already being compared is taken to be equal
Check whether two values are equal by value, however they are stored: two separately made arrays or objects with the same contents are equal, while two references only need to be the same when the value is a function.