为什么null == undefined在javascript中为真

Nav*_*Nav 15 javascript

如果我们alert(null==undefined)输出到true.

这是什么原因.

这是在javascript中硬编码的东西还是有解释.

Que*_*tin 22

语言规范明确说明:

如果x为null且y未定义,则返回true

我不知道语言设计过程的任何记录解释了该决定的推理,但是==有处理不同类型的规则,"null"和"undefined"都是"无"的东西,所以让它们成为平等有直觉意义.

(如果您不想要类型摆弄,请===改用).

  • 规范链接是纯金的,谢谢,别再争论你喜欢 JavaScript 了,去阅读文档吧。 (2认同)

Spu*_*ley 10

使用双重相等运算符会强制 Javascript 进行类型强制。

换句话说,当你这样做时x == y,如果xy不是相同的类型,JavaScript 会在比较之前将一个值转换为另一个值,就像如果比较字符串和数字,字符串总是被转换为数字然后比较

出于这个原因,JavaScript 中混合类型的许多比较可能会导致可能出乎意料或违反直觉的结果。

如果您想在 JavaScript 中进行比较,通常使用三重等于运算符===而不是双重等于运算符更好。这不会进行类型强制;相反,如果类型不同,则返回 false。这通常是您需要的。

如果您绝对确定需要它,您应该只使用 double-equal 。

  • 在 Javascript 中,“==”应用类型强制。“null”和“undefined”都是“falsey”原语。让我们希望这有助于推动逻辑回家! (3认同)

Pho*_*cUK 5

出于同样的原因0 == "0"-javascript的类型很松散-如果可以将某些内容转换为其他内容,除非您使用===

alert(null===undefined);
Run Code Online (Sandbox Code Playgroud)

会给你假的。

至于为什么会发生这些特定的转换-答案很简单,即“规范说这应该发生”。除了“因为它这么说”外,没有其他原因可以说明编程语言为何以某些方式运行。

  • 你能解释一下什么被转换成什么吗? (2认同)