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

81 lines
2.3 KiB
JavaScript
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)