两种类型:基本类型和引用类型
【基本类型】
6种基本类型:String,Number,Boolean,Null,Undefined,Symbol
访问:基本数据类型的值是按值访问的。
存储:基本类型的变量是存放在栈内存(Stack)里的。
【引用类型】
1种引用类型:Object
访问:引用类型的值是按引用访问的。
存储:引用类型的值是保存在堆内存(Heap)中的对象(Object)。
【注】
- 栈内存中包含了变量的标示符和指向堆内存中该对象的指针
- 堆内存中包含了对象的内容
- JavaScript 不能直接操作对象的内存空间(堆内存)
检测类型:
- typeof: 经常用来检测一个变量是不是基本数据类型
- 例:若结果是object或function,就不是基本数据类型
var a; typeof a; // undefined a = null; typeof a; // object a = true; typeof a; // boolean a = 1; typeof a; // number a = "111111111"; typeof a; // string a = Symbol(); typeof a; // symbol a = function(){} typeof a; // function a = []; typeof a; // object a = {}; typeof a; // object a = /aaa/g; typeof a; // object
- instanceof: 用来判断某个构造函数的 prototype 属性所指向的对象是否存在于另外一个要检测对象的原型链上。
简单说就是判断一个引用类型的变量具体是不是某种类型的对象 - 例:
-
({}) instanceof Object // true ([]) instanceof Array // true (/aa/g) instanceof RegExp // true (function(){}) instanceof Function // true
Object.prototype.toString.call()(这个是判断类型最准确的类型判断方法)。toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型,更严格的讲,是 toString运行时this指向的对象类型, 返回的类型格式为[object,xxx],xxx是具体的数据类型,其中包括:String,Number,Boolean,Undefined,Null,Function,Date,Array,RegExp,Error,HTMLDocument,… 基本上所有对象的类型都可以通过这个方法获取到
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object window]