Web/04-JavaScript基础/04-基本数据类型vs引用数据类型.md
2020-02-07 21:49:12 +08:00

81 lines
2.3 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.

## 前言
在上一篇文章中,我们介绍过,变量有以下数据类型:
- **基本数据类型(值类型)**String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。
- **引用数据类型(引用类型)**Object 对象。
本文,我们针对这两种类型,做进一步介绍。我们先来看个例子。
**基本数据类型举例**
```javascript
var a = 23;
var b = a;
a++;
console.log(a); // 打印结果24
console.log(b); // 打印结果23
```
上面的代码中a 和 b 都是基本数据类型,让 b 等于 a然后**改变 a 的值之后,发现 b 的值并没有被改变**。
但是在引用数据类型中,就不同了,我们来看一看。
**引用数据类型举例**
```javascript
var obj1 = new Object();
obj1.name = 'smyh';
// 让 obj2 等于 obj1
var obj2 = obj1;
// 修改 obj1 的 name 属性
obj1.name = 'vae';
console.log(obj1.name); // 打印结果vae
console.log(obj2.name); // 打印结果vae
```
上面的代码中obj1 和 obj2 都是引用数据类型,让 obj2 等于 obj1然后**修改 obj1.name 的值之后,发现 obj2.name 的值也发生了改变**。
从上面的例子中,可以反映出,基本数据类型和引用数据类型是有区别的。
那到底有什么区别呢?我们进一步往下看。
## 栈内存和堆内存
我们首先记住一句话JS中所有的**变量**都是保存在**栈内存**中的。
然后来看看下面的区别。
**基本数据类型**
基本数据类型的值,直接保存在栈内存中。值与值之间是独立存在,修改一个变量不会影响其他的变量。
**引用数据类型**
对象是保存到**堆内存**中的。每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而**变量保存了对象的内存地址**(对象的引用)。如果两个变量保存了同一个对象的引用,当一个通过一个变量修改属性时,另一个也会受到影响。
## 我的公众号
想学习<font color=#0000ff>**代码之外的技能**</font>?不妨关注我的微信公众号:**千古壹号**id`qianguyihao`)。
扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:
![](http://img.smyhvae.com/2016040102.jpg)