7种简单数据类型(基本数据类型)(原始数据类型)
字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、BigInt、Symbol
注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值
1种复杂数据类型(引用数据类型)
Object
对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)
区别
一、存储方式不一样
基本数据类型
基本数据类型存储在 栈内存
中,占据空间小,大小固定,基本数据类型的变量在 栈内存中 存储的是其值
引用数据类型
引用数据类型存储在 堆内存
中,占据空间大,大小不固定,频繁创建对象有损性能,引用数据类型的变量在 栈内存中 存储的是对象的引用地址,变量的值(也就是对象)存储在 堆内存中,该引用地址指向 堆内存
中的对象
二、动态属性不一样
基本数据类型不能添加
var person = "";
person.name = "jack";
person.age = 20;
console.log("姓名:%s, 年龄:%d", person.name, person.age); // 姓名:undefined, 年龄:NaN
引用数据类型能动态添加属性
var person = new Object();
person.name = "jack";
person.age = 20;
console.log("姓名:%s, 年龄:%d", person.name, person.age); // 姓名:jack, 年龄:20
三、赋值的方式不一样
基本数据类型,拷贝变量的内容
var num = 10;
var num2 = num; // 创建新的空间,拷贝 num 的值到 num2。这个两个变量的内容是互不影响的,num2 的内容是 num 的一个副本。类似操作系统的复件
var num = 10;
var num2 = num;
num2 = 100; // 并不会影响到 num 的值
console.log("num = %d num2 = %d",num,num2); // num = 10 num2 = 100
引用数据类型,拷贝引用地址
var person1 = new Object();
person1.age = 18;
var person2 = person1; // 拷贝引用地址,给变量 person2,于是同时指向一个对象
person2.age = 30; // 事实上也是 person1 指向的那个对象
console.log("person1.age = %d person2.age = %d", person1.age, person2.age); // person1.age=30 person2.age=30