๐ฅ๐ฒ๐ฎ๐๐ผ๐ป ๐ญ: Because of the table specified in ECMA-262.
๐ฅ๐ฒ๐ฎ๐๐ผ๐ป ๐ฎ: It might be a bug
Let's understand this:
In the ๐ถ๐ป๐ถ๐๐ถ๐ฎ๐น ๐ถ๐บ๐ฝ๐น๐ฒ๐บ๐ฒ๐ป๐๐ฎ๐๐ถ๐ผ๐ป ๐ผ๐ณ ๐๐ฎ๐๐ฎ๐ฆ๐ฐ๐ฟ๐ถ๐ฝ๐ all values were stored in ๐ฏ๐ฎ ๐ฏ๐ถ๐๐ ๐๐ป๐ถ๐๐, where:
The ๐ณ๐ถ๐ฟ๐๐ ๐ญโ๐ฏ ๐ฏ๐ถ๐๐ contain the ๐๐๐ฝ๐ฒ ๐๐ฎ๐ด
The ๐ฟ๐ฒ๐บ๐ฎ๐ถ๐ป๐ถ๐ป๐ด ๐ฏ๐ถ๐๐ contained the ๐ฎ๐ฐ๐๐๐ฎ๐น ๐ฑ๐ฎ๐๐ฎ
The ๐๐๐ฝ๐ฒ ๐๐ฎ๐ด for ๐ผ๐ฏ๐ท๐ฒ๐ฐ๐๐ was ๐ฌ.
The ๐ป๐๐น๐น ๐๐ฎ๐น๐๐ฒ, however, was ๐ฟ๐ฒ๐ฝ๐ฟ๐ฒ๐๐ฒ๐ป๐๐ฒ๐ฑ as the ๐ก๐จ๐๐ pointer, ๐๐ต๐ถ๐ฐ๐ต ๐๐ฎ๐ ๐ฌ๐ ๐ฌ๐ฌ for most platforms. As a result of this ๐๐ถ๐บ๐ถ๐น๐ฎ๐ฟ๐ถ๐๐, ๐ป๐๐น๐น ๐ต๐ฎ๐ the ๐ฌ ๐๐๐ฝ๐ฒ ๐๐ฎ๐ด, ๐๐ต๐ถ๐ฐ๐ต corresponds ๐๐ผ ๐ฎ๐ป ๐ผ๐ฏ๐ท๐ฒ๐ฐ๐.
There have been ๐ฑ๐ถ๐๐ฐ๐๐๐๐ถ๐ผ๐ป๐ in the ๐๐๐ ๐๐ฆ๐ฐ๐ฟ๐ถ๐ฝ๐ working group proposing the following ๐ฐ๐ต๐ฎ๐ป๐ด๐ฒ:
๐๐๐ฝ๐ฒ๐ผ๐ณ ๐ป๐๐น๐น === "๐ป๐๐น๐น"; // true
But ๐ถ๐ ๐๐ฎ๐ ๐ฟ๐ฒ๐ท๐ฒ๐ฐ๐๐ฒ๐ฑ and ๐๐ฟ๐ผ๐ฐ๐ธ๐ณ๐ผ๐ฟ๐ฑ pointed out: I think ๐ถ๐ ๐ถ๐ ๐๐ผ๐ผ ๐น๐ฎ๐๐ฒ ๐๐ผ ๐ณ๐ถ๐ ๐๐๐ฝ๐ฒ๐ผ๐ณ. The change proposed for the typeof null will break the existing code.
For an in-depth explanation, you can read the article by Axel Rauschmayer.