我知道,我知道一定有一些话题涉及这个话题。但是我使用了搜索,没有得到符合我需要的答案。现在我们开始:
如果变量null
或undefined
是如何检查的?它与null
之间的区别是什么?undefined
和==
有什么区别(很难在Google中搜索“==”)?
最佳答案:
如果变量是null
或undefined
,我该如何检查它呢?
是变量null
:
if (a === null)
// or
if (a == null) // but see note below
…但请注意,如果
a
是undefined
则后者也是正确的。它是不是:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
…但同样,请注意最后一个是模糊的;如果
undefined
是a
则也是正确的。现在,尽管存在上述情况,检查这些问题的通常方法是利用它们是虚假的事实:
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
这由规范中的ToBoolean定义。
…那么,
null
和null
之间的区别是什么?这两个值通常都用来表示没有什么东西。
undefined
是更通用的一个,在为变量分配其他值之前用作变量的默认值,作为在调用函数时未提供的函数参数的值,以及作为在向对象请求不具有的属性时获得的值。但它也可以在所有这些情况下显式地使用。(没有属性的对象与具有值为undefined
的属性之间存在差异;为参数调用值为undefined
的函数与完全不使用该参数之间存在差异。)undefined
比null
更具体:它是一个空白对象引用。当然,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(
==
)