https://jsisweird.com/

true + false

  1. Number(true); // -> 1
  2. Number(false); // -> 0
  3. 1 + 0; // -> 1

[,,,].length

  1. [,] + [,]; // -> ""
  2. [] + [] === [,] + [,]; // -> true
  3. [,,,] + [,,,]; // -> ",,,,"
  4. ([,,,] + [,,,]).length === [,,,,].length; // -> true

[1, 2, 3] + [4, 5, 6]

  1. [1, 2, 3,] + [4, 5, 6]; // -> "1,2,34,5,6"
  2. [1, 2, 3] + [, 4, 5, 6]; // -> "1,2,3,4,5,6"
  3. [1, 2, 3, ""] + [4, 5, 6]; // -> "1,2,3,4,5,6"
  4. [...[1, 2, 3], ...[4, 5, 6]];

0.2 + 0.1 === 0.3

  1. 0.2 + 0.1; // -> 0.30000000000000004;
  2. 0.2 + 0.1 > 0.3; // -> true

10,2

  1. 10, 2; // -> 2
  2. 1, 2, 3, 4; // -> 4
  3. 42, "pineapple", true; // -> true

!!””

  1. Boolean(""); // -> false
  2. Boolean(0); // -> false
  3. Boolean("Pineapple"); // -> true
  4. Boolean(42); // -> true

+!![]

  1. Boolean([]); // -> true
  2. Number(true); // -> 1

!!!true

  1. !!!!!!!!!!!!true; // -> true

true == “true”

  1. Number(true); // -> 1
  2. Number("true"); // -> NaN
  3. 1 == NaN; // -> false

010 - 03

  1. 010; // -> 8
  2. 03; // -> 3
  3. 8 - 3; // -> 5
  4. 01111111111111111; // -> 40210710958665
  5. 010 === 0000000010; // -> true

“” - - “”

  1. Number(""); // -> 0
  2. 0 - - 0; // -> 0
  3. +"" - -"";
  4. +0 - -0;
  5. - -""; // -> 0
  6. --""; // -> SyntaxError

null + 0

  1. Number(null); // -> 0
  2. 0 + 0; // -> 0
  3. null === false; // -> false
  4. +null === +false; // -> true

0/0

  1. isNaN(0/0); // -> true

1/0 > Math.pow(10, 1000)

  1. 1/0; // -> Infinity
  2. Math.pow(10, 1000); // -> Infinity
  3. Infinity > Infinity; // -> false

true++

  1. 1++; // -> SyntaxError
  2. "x"++; // -> SyntaxError
  3. undefined++; // -> NaN
  4. let _true = true;
  5. _true++;
  6. _true; // -> 2

“” - 1

  1. Number(""); // -> 0
  2. 0 - 1; // -> -1;
  3. " " - 1; // -> -1;
  4. "" + 1; // -> "1";

(null - 0) + “0”

  1. Number(null) - 0; // -> 0
  2. 0 + "0"; // -> "00"
  3. (null - 0) - "0"; // -> 0

true + (“true” - 0)

  1. Number("true"); // -> NaN

!5 + !5

  1. Boolean(5); // -> true
  2. !true; // -> false
  3. Number(false); // -> 0
  4. 0 + 0; // -> 0

[] + []

  1. [].toString(); // -> ""
  2. "" + ""; // -> ""
  3. [] + [] === [,] + [,]; // -> true
  4. [].length; // -> 0
  5. [,].length; // -> 1
  6. [].toString() === [,].toString(); // -> true
  7. Number([]) === Number([,]); // -> true

NaN === NaN

  1. isNaN(NaN); // -> true
  2. NaN === NaN; // -> false
  3. Object.is(NaN, NaN); // -> true

NaN++

  1. let _NaN = NaN;
  2. _NaN++;
  3. isNaN(_NaN); // -> true
  4. _NaN--;
  5. isNaN(_NaN); // -> true
  6. _NaN *= 10;
  7. isNaN(_NaN); // -> true

undefined + false

  1. Number(false); // -> 0
  2. Number(undefined); // -> NaN
  3. NaN + 0; // -> NaN
  4. !!undefined === false; // -> true
  5. !!undefined + false; // -> 0

+0 === -0

  1. +0 === -0; // -> true
  2. Object.is(+0, -0); // -> false

+!!NaN * “” - - [,]

  1. +!!NaN; // -> 0
  2. Number(""); // -> 0
  3. -[,]; // -> -0
  4. 0 * 0 - -0; // -> 0