如果变量是null 或undefined,我该如何检查...
是变量null:
if (a === null)
// or
if (a == null) // but see note below
...但请注意,如果 a 是 undefined,则后者也是正确的。
是undefined:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
...但同样,请注意最后一个是模糊的;如果a 是null 也是如此。
现在,尽管有上述情况,检查这些的通常方法是使用它们是 falsey 的事实:
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
这是由规范中的ToBoolean 定义的。
...null 和 undefined 有什么区别?
它们都是通常用来表示缺少某物的值。 undefined 是更通用的一个,用作变量的默认值,直到它们被分配一些其他值,作为函数调用时未提供的函数参数的值,以及当你得到的值向一个对象询问它没有的属性。但它也可以在所有这些情况下明确使用。 (没有属性的对象与具有值undefined 的属性之间存在差异;调用具有值undefined 的函数作为参数和完全关闭该参数之间存在差异。)
null 比undefined 稍微具体一点:它是一个空白对象引用。当然,JavaScript 是松散类型的,但并非所有与 JavaScript 交互的东西都是松散类型的。如果像浏览器中的 DOM 这样的 API 需要一个空白的对象引用,我们使用 null,而不是 undefined。同样,DOM 的 getElementById 操作返回一个对象引用——要么是有效的引用(如果它找到了 DOM 元素),要么是 null(如果它没有找到)。
有趣的是(或不是),它们是自己的类型。也就是说null是Null类型的唯一值,undefined是Undefined类型的唯一值。
“==”和“===”有什么区别
它们之间的唯一区别是== 会进行类型强制以尝试使值匹配,而=== 不会。例如"1" == 1 为真,因为"1" 强制转换为1。但是"1" === 1 是false,因为类型不匹配。 ("1" !== 1 是真的。)=== 的第一步(实际)是“操作数的类型是否相同?”如果答案为“否”,则结果为false。如果类型相同,它的作用与== 完全一样。
类型强制使用相当复杂的规则并且可能产生令人惊讶的结果(例如,"" == 0 为真)。
规范中的更多内容: