Webcourse/04-JavaScript基础/03-变量的数据类型:基本数据类型和引用数据类型.md
2020-05-15 20:05:56 +08:00

116 lines
3.7 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.

## 变量的数据类型
### 为什么需要数据类型
在计算机中不同的数据所需占用的存储空间不同为了充分利用存储空间于是定义了不同的数据类型而且不同的数据类型寓意也不同
我们都知道无论这个变量是字符串类型还是数字类型我们都可以直接用 `var` 去定义它比如
```javascript
var a = 'hello word';
var b = 123;
```
为什么可以这样做呢这是因为JavaScript 是一种弱类型语言或者说是一种动态语言这意味着不需要提前声明变量的类型在程序运行过程中类型会自动被确定
**JS 的变量数据类型是在程序运行的过程中根据等号右边的值来确定的**而且变量的数据类型是可以变化的比如说
```javascript
var name = 'qianguyihao';
name = 123; // 强制将变量 name 修改为 数字类型
```
### JS中一共有六种数据类型
- **基本数据类型值类型**String 字符串Number 数值Boolean 布尔值Null 空值Undefined 未定义
- **引用数据类型引用类型**Object 对象
注意内置对象 FunctionArrayDateRegExpError等都是属于 Object 类型也就是说除了那五种基本数据类型之外其他的都称之为 Object类型
> 面试问引用数据类型有几种
> 面试答只有一种 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)