在JavaScript中,
null
和undefined
有什么区别?null
和undefined
有什么区别?null和undefined都用于表示某个值的缺失。
var a = null;
a被初始化并定义。
typeof(a)
//object
null在JavaScript中是一个对象
Object.prototype.toString.call(a) // [object Object]
var b;
b未定义且未初始化
对象属性未定义也是未定义的。例如,在对象c上未定义“x”,如果尝试访问c.x,则会返回未定义。
通常我们将null赋值给变量,而不是undefined。
Object.prototype.toString.call(null); // "[object Null]"
- Paul S.undefined 和 null 的含义差异是 JavaScript 设计的偶然结果,在大多数情况下并不重要。在需要关注这些值的情况下,我建议将它们视为基本可以互换的。
来自 《JavaScript高级程序设计》 一书。
看这里,输出值得千言万语。
var b1 = document.getElementById("b1");
checkif("1, no argument" );
checkif("2, undefined explicitly", undefined);
checkif("3, null explicitly", null);
checkif("4, the 0", 0);
checkif("5, empty string", '');
checkif("6, string", "string");
checkif("7, number", 123456);
function checkif (a1, a2) {
print("\ncheckif(), " + a1 + ":");
if (a2 == undefined) {
print("==undefined: YES");
} else {
print("==undefined: NO");
}
if (a2 === undefined) {
print("===undefined: YES");
} else {
print("===undefined: NO");
}
if (a2 == null) {
print("==null: YES");
} else {
print("==null: NO");
}
if (a2 === null) {
print("===null: YES");
} else {
print("===null: NO");
}
if (a2 == '') {
print("=='': YES");
} else {
print("=='': NO");
}
if (a2 === '') {
print("==='': YES");
} else {
print("==='': NO");
}
if (isNaN(a2)) {
print("isNaN(): YES");
} else {
print("isNaN(): NO");
}
if (a2) {
print("if-?: YES");
} else {
print("if-?: NO");
}
print("typeof(): " + typeof(a2));
}
function print(v) {
b1.innerHTML += v + "\n";
}
<!DOCTYPE html>
<html>
<body>
<pre id="b1"></pre>
</body>
</html>
另请参阅:
祝好!
isNaN(null)
返回false
- 这让我感到惊讶。 - J. Bruninull - null是一种赋值值,与变量一起使用来表示没有值(它是一个对象)。
undefined - undefined是一种变量,它没有被分配任何值,所以JavaScript会给它分配一个未定义的值(它是一种数据类型)。
undeclared - 如果一个变量根本没有被创建,那么它就被称为未声明。
由于typeof返回undefined,undefined是一种类型,而null是一个初始化器,表示变量没有指向任何对象(实际上Javascript中的几乎所有内容都是对象)。
undefined
和 null
的区别很小,但它们是不同的。值为 undefined
的变量从未被初始化过,而值为 null
的变量是明确赋值为 null
的,这意味着该变量被显式设置为没有值。如果使用 null==undefined
表达式进行比较,则它们将相等。
null==undefined
之所以为true
,仅因为存在隐式转换(或JS中等效的术语)。显然,null===undefined
是false
,因为使用===
时它会比较类型。 - Guy通常情况下,为避免混淆,请勿使用 null
。
undefined
,而不是 null
let a = [10];
console.log(a[1]) //=> undefined
console.log(a.find(value => value === 5)) //=> undefined
undefined
,然后被赋值为某个值,最后通过设置为null
来清空。这不够一致,更好的做法是将其设置回undefined
。但是,如果框架使用null
,或者用于JSON序列化,则null
是有意义的。
undefined
”和“null
”之间的含义差异是 JavaScript 设计的一个偶然结果,在大部分情况下都不太重要。在您确实需要关注这些值的情况下,我建议将它们视为大多可以互换的。null
和undefined
)。
null
表示你有意将其设置为空,而undefined
是因为没有被设置而为空。或者说null
是故意设置为空,而undefined
则仍然为空。基本上这展示了意图。 - Muhammad Umer