Web/04-JavaScript基础/08-基本数据类型:Null 和 Undefined.md

124 lines
3.4 KiB
Markdown
Raw Normal View History

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