ZetCode

JavaScript null 关键字

最后修改于 2025 年 4 月 16 日

在本文中,我们将探讨 JavaScript 中的 null 关键字,它表示任何对象值的有意缺失。我们将通过实际例子来研究它的行为和用法。

null 关键字

null 关键字是一个原始值,表示任何对象值的有意缺失。它是 JavaScript 的原始类型之一,与 undefined、boolean、number、string 和 symbol 一起。

null 经常用于指示一个变量不应该有任何值,或者一个对象属性应该为空。它与 undefined 不同,undefined 表示一个变量已经被声明但未被赋值。

在类型检查中,由于 JavaScript 的历史 bug,null 返回 "object"。这可能会令人困惑,但在编写代码中的类型检查时记住这一点很重要。

基本 null 赋值

使用 null 的最简单方法是将其赋值给一个变量。

main.js
let user = null;
console.log(user); // null
console.log(typeof user); // object

这里我们将 null 赋值给 user 变量。当被记录时,它显示为 null,但它的类型被报告为 "object"。这展示了 null 在 JavaScript 类型系统中的特殊行为。

$ node main.js
null
object

检查 null

要检查一个值是否为 null,请使用严格相等 (===)。

main.js
let data = null;

if (data === null) {
    console.log('Data is null');
} else {
    console.log('Data has a value');
}

此示例展示了检查 null 值的正确方法。使用 == 也会匹配 undefined,这通常不是我们想要的。严格相等运算符确保我们只匹配 null。

$ node main.js
Data is null

Null vs undefined

Null 和 undefined 类似,但有重要的区别。

main.js
let var1 = null;
let var2;

console.log(var1); // null
console.log(var2); // undefined
console.log(var1 == var2); // true
console.log(var1 === var2); // false

这演示了 null 和 undefined 的比较。它们使用 == 比较相等,但使用 === 比较不相等。Undefined 意味着“未赋值”,而 null 意味着“有意没有值”。

$ node main.js
null
undefined
true
false

Null 在对象属性中

Null 经常用于清除对象属性。

main.js
let person = {
    name: 'John',
    age: 30,
    address: null
};

console.log(person.address); // null
person.address = '123 Main St';
console.log(person.address); // 123 Main St
person.address = null;
console.log(person.address); // null

这里我们使用 null 来表示 address 属性是有意为空的。我们稍后可以分配一个真实的值或将其设置回 null。这是可选对象属性的常见模式。

$ node main.js
null
123 Main St
null

Null 作为函数返回值

函数可以返回 null 以表示没有有效结果。

main.js
function findUser(id) {
    // Simulate not finding a user
    return null;
}

let user = findUser(123);
if (user === null) {
    console.log('User not found');
}

这种模式在搜索数据的函数中很常见。返回 null 清楚地表明没有找到结果,与 undefined 不同,后者可能暗示错误或函数未正确实现。

$ node main.js
User not found

Null 在默认参数中

Null 可以与默认参数一起使用,以区分缺失值和 null 值。

main.js
function greet(name = 'Guest') {
    if (name === null) {
        console.log('Hello Anonymous');
    } else {
        console.log(`Hello ${name}`);
    }
}

greet(); // Hello Guest
greet(null); // Hello Anonymous
greet('John'); // Hello John

这里我们以与省略参数不同的方式处理 null。默认值仅在参数为 undefined 时才适用,而不是在它被明确设置为 null 时适用。这允许更精确的参数处理。

$ node main.js
Hello Guest
Hello Anonymous
Hello John

Null 在 JSON 中

Null 在 JSON 中被正确序列化,而 undefined 则不然。

main.js
let data = {
    name: 'Alice',
    age: null,
    score: undefined
};

let json = JSON.stringify(data);
console.log(json); // {"name":"Alice","age":null}

当转换为 JSON 时,null 值被保留,而未定义的属性被省略。这表明 null 是一个有效的 JSON 值,而 undefined 不是 JSON 规范的一部分。

$ node main.js
{"name":"Alice","age":null}

来源

null - 语言参考

在本文中,我们已经演示了如何使用 null 关键字来表示 JavaScript 中值的有意缺失。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我撰写了超过 1,400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

查看 所有 JavaScript 教程。