javascript - JavaScript检查null与undefined以及==和===之间的差异

我知道,我知道一定有一些话题涉及这个话题。但是我使用了搜索,没有得到符合我需要的答案。现在我们开始:
如果变量nullundefined是如何检查的?它与null之间的区别是什么?
undefined==有什么区别(很难在Google中搜索“==”)?


最佳答案:

如果变量是nullundefined,我该如何检查它呢?
是变量null

if (a === null)
// or
if (a == null) // but see note below

…但请注意,如果aundefined则后者也是正确的。
它是不是:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below

…但同样,请注意最后一个是模糊的;如果undefineda则也是正确的。
现在,尽管存在上述情况,检查这些问题的通常方法是利用它们是虚假的事实:
if (!a) {
    // `a` is falsey, which includes `undefined` and `null`
    // (and `""`, and `0`, and `NaN`, and [of course] `false`)
}

这由规范中的ToBoolean定义。
…那么,nullnull之间的区别是什么?
这两个值通常都用来表示没有什么东西。undefined是更通用的一个,在为变量分配其他值之前用作变量的默认值,作为在调用函数时未提供的函数参数的值,以及作为在向对象请求不具有的属性时获得的值。但它也可以在所有这些情况下显式地使用。(没有属性的对象与具有值为undefined的属性之间存在差异;为参数调用值为undefined的函数与完全不使用该参数之间存在差异。)
undefinednull更具体:它是一个空白对象引用。当然,JavaScript是松散类型的,但并非所有与之交互的东西都是松散类型的。如果像浏览器中的DOM这样的API需要空白的对象引用,那么我们使用的是undefined,而不是null。同样地,dom的undefined操作返回一个对象引用-有效的引用(如果找到了dom元素),或者getElementById(如果没有)。
有趣的是(或不是),他们是他们自己的类型。也就是说,null是空类型中的唯一值,null是未定义类型中的唯一值。
“==”和“==”之间的区别是什么?
它们之间唯一的区别是,undefined将执行类型强制以尝试使值匹配,而==将不执行类型强制。因此,例如,===为真,因为"1" == 1将强制为"1"。但是1是假的,因为类型不匹配。("1" === 1为真。)"1" !== 1的第一步(实)是“操作数的类型是否相同?”如果答案是“否”,则结果是===。如果类型相同,它会完全执行false所做的操作。
类型强制使用非常复杂的规则,可能会产生令人惊讶的结果(例如,==是真的)。
规范中的更多内容:
Abstract Equality Comparison"" == 0,也称为“松散”等同性)
Strict Equality Comparison==