1、 六种简单数据类型:Undefined、Null、Boolean、Number、String、Symbol(新增);
一种复杂数据类型:Object;
(1)基本数据类型保存在栈内存中,是按值传递的,因为可以直接操作保存在变量中的实际值;
(2)引用数据类型是保存在堆内存中的对象;与其他语言的不同是,JavaScript没有按引用传递,而是传递引用类型的参数(是按值传递,按引用访问),你不可以直接访问堆内存空间中的位置和操作堆内存空间,只能操作对象在栈内存中的引用地址;
(3)typeof 操作符适合确定除 Null 以外的简单数据类型;
1 var a = "hyd"; 2 var b = ture; 3 var c = null; 4 var d = new Object(); 5 6 alert(typeof a); //string 7 alert(typeof b); //boolean 8 alert(typeof c); //object 9 alert(typeof d); //object
(4) instanceof 操作符可以用来判断new 出来基本类型(简单数据类型);
1 var a = new String("hyd"); 2 alert(a instanceof String); //true 3 4 var b = "hyd"; 5 alert(b instanceof String); //false
2、 引用类型:Object、Array、Function、Date、RegExp、基本包装类型、单体内置对象(特殊引用类型);
(1)引用类型是一种数据结构,用以将数据和功能组合在一起;
(2)使用 new 创建的均为 Object 类型,所有引用类型默认都继承自 Object ;
(3)使用 typeof 操作符无法有效区分引用类型,只能知道他是对象,而不能知道是什么类型的对象,此时使用 instanceof 操作符;
1 var o = new Object(); 2 var a = new Array(); 3 var r = new RegExp(); 4 5 alert(o instanceof Object); //true 6 alert(a instanceof Object); //true 7 alert(r instanceof Object); //true 8 //检测一个引用类型值与Object构造函数时,始终返回ture 9 10 alert(a instanceof Array); //true 11 alert(r instanceof RegExp); //true
3、 基本包装类型:Boolean、Number、String;
(1)基本包装类型首先是基本类型,同时是特殊引用类型;
(2)自动创建的基本包装类型的对象,只存在与一行代码执行瞬间,而使用new运算符创建的引用类型的实例,在执行流离开当前作用域之前一直保存在内存中;
PS:typeof 检测函数返回"function";
Safair 5 及Chrome 7 之前,typeof 检测正则表达式返回"function";
ECMA-262规定:内部实现 [[call]] 方法的对象都应该在typeof 操作符时候返回“function”!
IE 与 Firefox 中,typeof 检测正则表达式返回"object";