1. 介绍
在 JavaScript 中数据类型大致分两种:
-
原始值(原始数据类型)
-
引用值(引用数据类型)
2. 原始值
原始数据类型有以下5种:
-
number:表示数字,如:整数、小数、NaN
-
string:表示字符串,如:字符串
-
boolean:表示布尔值,如:true、false
-
null:表示一个对象为空的占位符
-
undefined:表示未定义,即如果一个变量没有赋予初始化值,则会被默认赋值为undefined
原始值特点:不可改变的原始值,栈 (stack) 数据;栈内存的特性就是 first-in-last-out
3. 引用值
引用数据类型有以下几种:
-
array
-
Object
-
function
-
date
-
RegExp(正则表达式)
引用值特点:堆 (heap) 数据;堆内存的特性就像 "储物格那样,怎么放就怎么拿"(存放是分散没规律的)
以上每一个引用数据类型我们都需会在接下来的文章中,再详细讲解,因为它涉及的内容太多。
4. 两者的区别
-
特点不一样,原始值是存放在 stack栈 里面的,而引用值大致存放在 heap堆 里面的。
-
在栈内存中,无论是原始值或引用值,之间的赋值均是拷贝行为。
-
原始值:两个原始值在栈内存之间赋值,会产生两独立房间,因此两者之间不会互相影响。
-
引用值:引用值是存放在堆内存中,而引用值所对应的地址则存放在栈内存的。当两个引用值之间发生赋值,拷贝的是引用值的地址,再由地址指向堆中的数据。

// 原始值往栈内存放数据 - 案例:
var a = 10;
var b = a;
a = 20;
document.write(b); // 结果为:10
// 引用值往堆内存放数据 - 案例1:
var arr = [1];
var arr1 = arr;
arr.push(2);
document.write(arr); // 结果为: arr等于 [1,2]
document.write(arr1); // 结果为: arr1等于 [1,2]
// 引用值往堆内存放数据 - 案例2:
var arr =[1,2];
var arr1 = arr;
arr = [1,3];
document.write(arr1); // 结果为:arr1等于 [1,2]
document.write(arr); // 结果为:arr等于 [1,3]
/*
- 第二案例是往原数组中插入数据,即在堆内存中的原数据房间中进行修改
- 第三案例是重新对原数组赋值,重新赋值意味着:堆内存数据重新开新房间,新房间对应的地址也跟着变
*/
4558

被折叠的 条评论
为什么被折叠?



