如何检查变量是否null
or undefined
...
是变量null
:
if (a === null)
// or
if (a == null) // but see note below
...但请注意,如果a
is undefined
.
Is it undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
...但请再次注意,最后一个是模糊的;如果a
is null
.
现在,尽管存在上述情况,usual检查这些的方法是利用它们是falsey:
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
这是由以下定义的转换为布尔值 http://www.ecma-international.org/ecma-262/6.0/index.html#sec-toboolean在规格中。
...两者之间有什么区别null
and undefined
?
它们都是通常用来表示某物不存在的值。undefined
是更通用的一个,用作变量的默认值,直到它们被分配其他值为止,作为调用函数时未提供的函数参数的值,以及作为询问对象时获得的值对于它没有的属性。但它也可以在所有这些情况下明确使用。 (不具有属性的对象与具有具有值的属性的对象之间存在差异undefined
;使用值调用函数之间存在差异undefined
进行论证,并完全忽略该论证。)
null
比undefined
:这是一个空白对象引用。当然,JavaScript 是松散类型的,但并非所有与 JavaScript 交互的东西都是松散类型的。如果像浏览器中的 DOM 这样的 API 需要一个空白的对象引用,我们可以使用null
, not undefined
。类似地,DOM 的getElementById
操作返回一个对象引用——要么是一个有效的引用(如果它找到了 DOM 元素),要么null
(如果没有)。
有趣的是(或没有),他们有自己的类型。也就是说,null
是 Null 类型中的唯一值,并且undefined
是未定义类型中的唯一值。
“==”和“===”有什么区别
它们之间唯一的区别是==
将进行类型强制以尝试使值匹配,并且===
惯于。例如"1" == 1
是真的,因为"1"
强迫1
. But "1" === 1
is false,因为类型不匹配。 ("1" !== 1
是真的。)第一步(真正的)===
是“操作数的类型是否相同?”如果答案为“否”,则结果为false
。如果类型相同,它的作用完全相同==
does.
类型强制使用相当复杂的规则,并且可能会产生令人惊讶的结果(例如,"" == 0
是真的)。
规范中的更多内容:
-
抽象相等比较 http://www.ecma-international.org/ecma-262/6.0/index.html#sec-abstract-equality-comparison (
==
,也称为“松散”平等)
-
严格平等比较 http://www.ecma-international.org/ecma-262/6.0/index.html#sec-strict-equality-comparison (
===
)