JavaScript 检查 null 与 unfined 以及 == 和 === 之间的差异
如何检查变量(如果它是 or)和 和 之间的区别是什么?
null
undefined
null
undefined
和(很难在谷歌上搜索“===”)有什么区别?
==
===
如何检查变量(如果它是 or)和 和 之间的区别是什么?null
undefined
null
undefined
和(很难在谷歌上搜索“===”)有什么区别?==
===
如何检查变量,如果它是或...
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
现在,尽管有上述内容,但检查这些内容的常用方法是使用它们是虚假的事实:
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
比 :它是一个空白对象引用。当然,JavaScript是松散类型的,但并非所有与JavaScript交互的东西都是松散类型的。如果像浏览器中的 DOM 这样的 API 需要一个空白的对象引用,我们使用 ,而不是 。同样,DOM 的操作返回一个对象引用 — 要么是有效的(如果它找到了 DOM 元素),要么(如果它没有找到)。undefined
null
undefined
getElementById
null
有趣的是(或不是),他们是自己的类型。也就是说,它是 Null 类型中的唯一值,并且是未定义类型中的唯一值。null
undefined
“==”和“===”有什么区别
它们之间的唯一区别是,将执行类型强制以尝试使值匹配,并且不会。因此,例如,这是真的,因为强制到.但是是错误的,因为类型不匹配。(确实如此。第一个(实际的)步骤是“操作数的类型是否相同?”如果答案为“否”,则结果为 。如果类型相同,则它执行完全相同的操作。==
===
"1" == 1
"1"
1
"1" === 1
"1" !== 1
===
false
==
类型强制使用相当复杂的规则,并且可能会产生令人惊讶的结果(例如,这是真的)。"" == 0
规格中的更多内容:
区别是微妙的。
在 JavaScript 中,变量是从未声明或从未赋值的变量。假设您声明例如,那么将是 ,因为它从未被分配过任何值。undefined
var a;
a
undefined
但是,如果您随后分配,则现在将是 .在JavaScript中是一个对象(如果你不相信我,请在JavaScript控制台中尝试),这意味着null是一个值(实际上甚至是一个值)。a = null;
a
null
null
typeof null
undefined
例:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
这在函数参数中很有用。您可能希望具有默认值,但认为 null 是可以接受的。在这种情况下,您可以执行以下操作:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
如果省略参数 optional 将是字符串,但如果传递,则 optional 将是 。optional
doSomething(1, 2) then
"three"
doSomething(1, 2, null)
null
至于相等和严格相等的比较器,第一个是弱类型,而严格相等也检查值的类型。这意味着这将返回真实;while 将返回 false,因为数字不是字符串。==
===
0 == "0"
0 === "0"
您可以使用这些运算符在 .例如:undefined
null
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
最后一种情况很有趣,因为它允许您检查变量是未定义的还是空的,而不是其他任何内容:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true