> For the complete documentation index, see [llms.txt](https://anjia1.gitbook.io/web/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://anjia1.gitbook.io/web/js/data-type/primitive/null.md).

# 2. Null

## 1. 通用知识

在计算机编程中，null 指针（或引用）是一个保留值，用来表示指针（或引用）没有指向一个有效对象。程序通常用它来表示某些特定条件，比如未知长度列表的结尾、某些无法执行的操作。

此外，一些编程语言还有个特性是可空类型（nullable type），它允许将值设置为特殊值 NULL 而不是其它常见的数据类型。在静态类型语言中，可空类型是可选类型（option type 或 maybe type），而动态类型语言往往是提供一个单独的 null 值。

NULL 也经常用来表示缺失值或无效值，比如没有成功返回的函数、数据库里的缺失字段（如SQL里的 NULL）。

## 2. 原始值

Null 类型只有一个值，就是 null。null 值表示对象值的有意缺失。

## 3. 注意事项

### 3.1 typeof null

在 JavaScript 中，null 是原始值之一，因为它的行为看起来是”原始的“。

但是，在某些情况下，null 值并不像它看起来的那样”原始“，因为所有的对象都继承自 null 值，所以它的 typeof 运算符返回的是 object。如下：

```javascript
typeof null; // "object"
```

`typeof null` 是 "object" 而不是 "null"，这是一个历史遗留问题。

### 3.2 null 关键字

与 undefined 不同，null 不是全局对象的属性标识符，而且它是 JavaScript 的关键字，所以可以放心地使用 null 关键字来获取 null 值。

```javascript
if (foo === null) {}
let bar = null;
```

当给 null 赋值的时候，会报错。如下：

```javascript
null = 'hello';  // SyntaxError: Invalid left-hand side in assignment
```

此外，null 和 undefined 还有如下不同：

```javascript
null == undefined;     // true
null === undefined;    // false

1 + null;        // 1
1 + undefined;   // NaN
isNaN(1 + null);       // false
isNaN(1 + undefined);  // true
```

## 4. 总结

这部分介绍了 Null 类型和它对应的 null 值，null 是 JavaScript 的关键字，所以可以放心地使用。值得注意的是，`typeof null` 是返回 "object" 而不是 "null"。

## 5. 主要参考

* <https://en.wikipedia.org/wiki/Null_pointer>
* <https://en.wikipedia.org/wiki/Nullable_type>
* <https://developer.mozilla.org/en-US/docs/Glossary/null>
* <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null>
