一:ES6的数据结构总共有多少种?具体有哪些
总的来讲截止到ES6,总共有8
种数据解构:7种原始数据解构 + 1种复杂数据解构
7种原始数据解构:数据结构
Boolean Null Undefined Number BigInt String Symbol
1种复杂数据解构:app
Object
二:如何判断一个数据的类型
判断一个变量的数据类型有多种方法,可是有些方法并不适用于任何数据类型。函数
1: typeof
typeof能够用来判断全部的基本数据类型,返回值为一个字符串,其值为类型名字的小写形式。prototype
//6种原始数据类型 console.log(typeof 'a');//"string" console.log(typeof 1);//"number" console.log(typeof true);//"boolean" console.log(typeof Symbol());//"symbol" console.log(typeof undefined);//"undefined" console.log(typeof null);//"object" //对象类型 console.log(typeof {});//"object" console.log(typeof []);//"object" console.log(typeof new Map());//"object" console.log(typeof new Set());//"object" //function类型 console.log(typeof function () {});//"function"
从上面的代码咱们能够看到有三类数据的typeof返回值,可能值得咱们特殊关注一下:code
1: null 虽然是原始数据类型,可是typeof(null)获得的是 'object' 2: Array,Set,Map类型的数据,typeof的结果都是'object' 3: function是JavaScript整个语言的核心,对一个function使用typeof,获得'function'
2: instanceOf对象
语法:object instanceof constructor
instanceOf用于判断一个对象是不是某个构造函数的实例,返回值为true或者false。instanceOf与typeof的区别就在于,instanceOf只用在对象类型的数据上:继承
let fun = new Function(); function Apple() {} let apple = new Apple(); console.log(fun instanceof Function);//true console.log(apple instanceof Apple);//true console.log(apple instanceof Function);//false console.log([] instanceof Array);//true console.log([] instanceof Object);//true console.log(new Map() instanceof Map);//true console.log(new Map() instanceof Object);//true console.log({} instanceof Object);//true
这里要特别注意的是,Array,Set, Map它们有本身的构造器,可是Object是根构造器,因此对它们使用instanceOf Object
, 固然也是返回true。ip
3: constructor字符串
语法:o.constructor
constructor返回一个对象的构造函数,而不是一个字符串。概念上好像与instanceOf差很少,可是实际操做以后,结果却不同,咱们先来看一下代码:原型
let fun = new Function(); function Apple() {} let apple = new Apple(); console.log(fun.constructor === Function);//true console.log(apple.constructor === Apple);//true console.log(apple.constructor === Function);//false console.log([].constructor === Array);//true console.log([].constructor === Object);//false console.log(new Map().constructor === Map);//true console.log(new Map().constructor === Object);//false console.log({}.constructor === Object);//true
当咱们对Array,Map获取constructor的时候,会获得最具体的构造函数,因此它们的构造函数不等于Object。
4: prototype
prototype是原型对象,全部实例化的对象,都会继承prototype对象上的属性和方法。
全部的对象,例如{}
都会继承Object.prototype上的属性和方法;Array,Set,Map也都是继承自Object,因此咱们也能够利用prototype来判断对象的类型:
let fun = new Function(); function Apple() {} let apple = new Apple(); console.log(Object.prototype.toString.call(fun)); //"[object Function]" console.log(Object.prototype.toString.call(apple)); //"[object Object]" console.log(Object.prototype.toString.call([]));//"[object Array]" console.log(Object.prototype.toString.call(new Map()));//"[object Map]" console.log(Object.prototype.toString.call({}));//"[object Object]"