Webcourse/04-JavaScript基础/06-基本数据类型:Null 和 Undefined.md
2020-06-12 15:51:38 +08:00

122 lines
3.1 KiB
JavaScript
Raw Permalink 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.

很多其他的语言中只有 null JS 语言中既有 null又有 undefined很多人会弄混由此觉得 JS 语言很麻烦其实不然学习完这篇文章后你会发现 null undefined 的区别很容易理解
## Null空对象
null 专门用来定义一个**空对象**例如`let a = null`
如果你想定义一个变量用来保存引用类型但是还没想好放什么内容这个时候可以在初始化时将其设置为 null
比如
```js
let myObj = null;
cosole.log(typeof myObj); // 打印结果object
```
补充
- Null 类型的值只有一个就是 null比如 `let a = 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();
```
## 其他区别
null undefined 有很大的相似性看看 `null == undefined` 的结果为 `true` 也更加能说明这点
但是 `null === undefined` 的结果是 false它们虽然相似但还是有区别的其中一个区别是和数字运算时
- 10 + null 结果为 10
- 10 + undefined 结果为 NaN
规律总结
- 任何数据类型和 undefined 运算都是 NaN;
- 任何值和 null 运算null 可看做 0 运算
## 我的公众号
想学习**代码之外的技能**不妨关注我的微信公众号**千古壹号**
扫一扫你将发现另一个全新的世界而这将是一场美丽的意外
![](http://img.smyhvae.com/20200101.png)