JavaScript puzzle: equal, but not the same
The following puzzle has been posted on Reddit by davvblack: What are the values of x and y , given the following interaction? > x === y true > 1/x > 1/y true Show answer x is +0, y is -0. +0 and -0 are the only two values that are not the same, but are still considered strictly equal [1] . They can only be distinguished indirectly, by applying a mathematical operation to them that produces distinguishable results. Dividing 1 by zero is one of several operations that does so: > 1/-0 -Infinity > 1/+0 Infinity The infinities are distinguishable: > -Infinity === Infinity false Further reading: “ Stricter equality in JavaScript ” explores more consequences of strict equality’s special treatment of +0, -0 and NaN . “ JavaScript’s two zeros ” provides more information on the two zeros. For example, other ways than the above for distinguishing them.