Web/04-JavaScript基础/08-基本数据类型:Null 和 Undefined.md
2022-07-22 17:06:42 +08:00

124 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 08-基本数据类型Null 和 Undefined
publish: true
---
<ArticleTopAd></ArticleTopAd>
很多其他的语言中,只有 null但 JS 语言中,既有 null又有 undefined。很多人会弄混由此觉得 JS 语言很麻烦。其实不然,学习完这篇文章后,你会发现 null 和 undefined 的区别很容易理解。
## Null空对象
null 专门用来定义一个**空对象**。例如:`let a = null`,又例如 `Object.create(null)`.
如果你想定义一个变量用来保存引用类型,但是还没想好放什么内容,这个时候,可以在初始化时将其设置为 null。你可以把 null 理解为:**null 虽然是一个单独的数据类型但null 相当于是一个 object只不过地址为空空指针而已**。
比如:
```js
let myObj = null;
cosole.log(typeof myObj); // 打印结果object
```
补充:
- Null 类型的值只有一个,就是 null。比如 `let a = null`
- 从语义上讲null表示一个空对象所以使用 typeof 检查一个 null 值时,会返回 object。
## undefined未定义类型
### case1变量已声明未赋值时
**声明**了一个变量,但没有**赋值**,此时它的值就是 `undefined`。举例:
```js
let name;
console.log(name); // 打印结果undefined
console.log(typeof name); // 打印结果undefined
```
补充:
- Undefined 类型的值只有一个,就是 undefind。比如 `let a = undefined`
- 使用 typeof 检查一个 undefined 值时,会返回 undefined。
### case2变量未声明未定义
如果你从未声明一个变量,就去使用它,则会报错(这个大家都知道);此时,如果用 `typeof` 检查这个变量时,会返回 `undefined`。举例:
```js
console.log(typeof a); // undefined
console.log(a); // 打印结果Uncaught ReferenceError: a is not defined
```
### case3函数无返回值时
如果一个函数没有返回值,那么,这个函数的返回值就是 undefined。
或者,也可以这样理解:在定义一个函数时,如果末尾没有 return 语句,那么,其实就是 `return undefined`
举例:
```js
function foo() {}
console.log(foo()); // 打印结果undefined
```
### case4调用函数时未传参
调用函数时,如果没有传参,那么,这个参数的值就是 undefined。
举例:
```js
function foo(name) {
console.log(name);
}
foo(); // 调用函数时未传参。执行函数后的打印结果undefined
```
实际开发中,如果调用函数时没有传参,我们可以根据需要给形参设置一个默认值:
```js
function foo(name) {
name = name || 'qianguyihao';
}
foo();
```
等学习了 ES6 之后,上方代码也可以这样写:
```js
function foo(name = 'qianguyihao') {}
foo();
```
## 其他区别
undefined 实际上是由 null 衍生出来的,所以`null == undefined`的结果为 true。
但是 `null === undefined` 的结果是 false。它们虽然相似但还是有区别的其中一个区别是和数字运算时
- 10 + null 结果为 10。
- 10 + undefined 结果为 NaN。
规律总结:
- 任何值和 null 运算null 可看做 0 运算。
- 任何数据类型和 undefined 运算都是 NaN。
## 赞赏作者
创作不易,你的赞赏和认可,是我更新的最大动力:
![](https://img.smyhvae.com/20220401_1800.jpg)