一、基本数据类型
ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String,也称为基本数据类型,ES6中又增加了一种Symbol。
基本数据类型是存放在栈(stack)中的简单数据,由stack自动分配内存空间,数据大小确定,他们是直接按值存放的,所以基本数据类型的访问可以直接按值访问,他们会由系统自动释放。任何方法都不能改变基本类型的值,基本类型的比较是值的比较。
1、undefined类型 ---- 只有一个值,即undefined。当声明的变量未初始化 时,该变量的默认值是undefined;
var unType; //声明变量未赋值
console.log(unType); // undefined
console.log(typeof unType); // undefined
console.log(unType == undefined); //true
console.log(unType === undefined); //true
2、null 类型 ---- 也是只有一个专用值 null,即它的字面量。值undefined实际上是从null派生而来的,因此ECMAScript把它们定义为相等的。
console.log(null == undefined); // true
虽然这两个值相等,但它们的含义是不同的,null 用于表示尚未存在的对象,如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。
3、boolean(布尔)类型 ---- 它有两个值 true 和 false(即两个boolean字面量)。
4、number类型 ---- 既可以表示32位的整数,也可以表示64位的浮点数。
几个特殊的number值:Number.MAX_VALUE 、Number.MIN_VALUE、Infinity(表示无穷大)、NaN(Not a Number)..........
具体可学习w3school。
5、string类型 ---- 字符串类型,是唯一一个没有固定大小的原始类型。
6、Symbol类型 ---- 表示独一无二的值,通过Symbol函数生成。
二、引用数据类型
引用数据类型除了上述的基本类型之外就是引用类型了,function、array、object、regex.....(js中出了基本数据类型以外的都是对象)
引用数据类型是存放在堆(heap)内存中的对象,heap是动态分配的内存,每个空间大小不一样,要根据情况进行特定的配置,也不一定会自动释放。变量保存的是在栈内存中的一个指针(保存的是堆内存中的引用地址),指针指向的是堆内存。在复制引用类型值的时候,其实只复制了指向该内存的地址。引用类型的值是可变的,引用类型的比较是引用的比较,也就是比较两个对象在堆内存中的地址是否相同。
例1:
var object1 = {};
var object2 = {};
console.log(object1 == object2); // false
解析如图:
例2:
学习随笔,如有不周,望请海涵,欢迎小伙伴们各种讨论、指正。