一: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]"