我总结后的数据类型(1~6是基本(原始)类型,7是引用类型):
1.number;
2.string;
3.boolean;
4.undefined;
5.null;
6.symbol(ES6新增,文章后面有对着新类型的解释)
7.Object.(包括Object,Array,Function)
注意:有以下代码:
var arry=[1,2,3];
var nul=null;
console.log(typeof arry);//object
console.log(typeof nul );//object
查阅资料有以下:
Null 类型
另一种只有一个值(值为null)的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
alert(null == undefined); //输出 "true"
尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。
那么就有当声明一个变量,这个变量的值为null,那么这个变量就是“不存在的”。
基本类型和引用类型的区别
1. 基本类型: string,number,boolean,null,undefined,symbol
2. 引用类型: Function,Array,Object
访问方式 | |
基本类型 | 引用类型 |
操作和保存在变量的实际的值 | 值保存在内存中,js不允许直接访问内存,在操作的时候,操作的是对象的引用 |
存储的位置 | |
基本类型 | 引用类型 |
保存在栈区 | 引用存放在栈区,实际对象保存在堆区
|
由上图可以看出当声明了一个引用变量,在堆内存中就有了一个专属的位置,除非是复制的,否则不可能相等,有以下代码为证:
console.log({}=={});//false
console.log([]==[]);//false
3.A primitive (primitive value, primitive data type) is data that is not an object and has no methods.
这句话是从MDN上摘下来的,意思是原始数据类型不是引用类型(如果翻译成不是一个对象,你觉得对吗)且没有方法;
symbol类型
var a1 = Symbol('a')
var a2 = Symbol('a')
a1 !== a2 // true
可以记一句话:
Symbol 生成一个全局唯一的值。
MDN上关于symbol的解释 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol