詳解JavaScript中的數(shù)據(jù)類型,以及檢測(cè)數(shù)據(jù)類型的方法
一.js中的數(shù)據(jù)類型有哪些?
在js中,基本數(shù)據(jù)類型有五種,分別是 string、number、boolean、null、undefined,不過(guò)在ES6中新增加的了一種基本數(shù)據(jù)類型Symbol(表示獨(dú)一無(wú)二的值),其作用主要是從根本上防止屬性名的沖突而設(shè)定的。
除了基本數(shù)據(jù)類型之外,還有引用數(shù)據(jù)類型object,也有人稱之為復(fù)雜數(shù)據(jù)類型,包含了我們常見的Array、Object、Function等。
所以現(xiàn)在js中的數(shù)據(jù)類型共有七種。
PS: Symbol數(shù)據(jù)類型通過(guò)Symbol函數(shù)生成。也就是說(shuō),對(duì)象的屬性名現(xiàn)在可以有原來(lái)的字符串以及現(xiàn)在的Symbol類型倆種了,凡是屬性名屬于Symbol類型,就是獨(dú)一無(wú)二的,可以保證不會(huì)與其他屬性名沖突。
Symbol函數(shù)還可以接收一個(gè)字符串參數(shù),表示對(duì)Symbol實(shí)例的描述。
let s = Symbol() console.log(typeof s) // "symbol" let s1 = Symbol('s1') let s2 = Symbol('s2') console.log(s1) // Symbol(s1) console.log(s2) // Symbol(s2)
注意:Symbol函數(shù)的參數(shù)只是表示對(duì)當(dāng)前實(shí)例的描述,因此相同參數(shù)的Symbol的返回值是不相等的。
二.js數(shù)據(jù)類型檢測(cè)的方法(一般有一下幾種):
1.typeof:typeof一般用于檢測(cè)基本數(shù)據(jù)類型,因?yàn)樗鼨z測(cè)引用數(shù)據(jù)類型都返回Objcet
console.log(typeof 1) // "number" console.log(typeof 'a') // "string" console.log(typeof undefined) // "undefined" console.log(typeof true) // "boolean" console.log(typeof null) // "object" console.log(typeof ) // "symbol" function fun(){ } console.log(typeof fun) // "function"
注意:typeof檢測(cè)null也會(huì)返回Object,這是js一直以來(lái)遺留的BUG。用typeof檢測(cè)function返回的是'function'。
2.instanceof 這個(gè)方法主要是用來(lái)準(zhǔn)備的檢測(cè)引用數(shù)據(jù)類型的(不能用來(lái)檢測(cè)基本數(shù)據(jù)類型),用來(lái)檢測(cè)構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在對(duì)象原型鏈中的任意位置。
let fun = function(){ } fun instanceof Function //true let obj ={ } obj instanceof Object //true let arr = [ ] arr instanceof Array //true
曾今被面試官問(wèn)過(guò)一道題 1 instanceof 返回的是什么? 當(dāng)時(shí)給因?yàn)樽陨碓蛘f(shuō)了返回true,現(xiàn)在想想Emmm…
1 instanceof Number //false null instanceof Object // false
instanceof運(yùn)算符直接訪問(wèn)的變量的原始值,不會(huì)自動(dòng)建立包裝類。因此不能用來(lái)判斷基本數(shù)據(jù)類型。
3.Object.prototype.toString()可以用來(lái)準(zhǔn)備的檢測(cè)所有數(shù)據(jù)類型。
Object.prototype.toString.call([]) // "object Array" Object.prototype.toString.call(1) // "object Number" Object.prototype.toString.call(null) // "object Null" Object.prototype.toString.call(undefined) // "object Undefined" Object.prototype.toString.call({}) // "object Object" Object.prototype.toString.call(function add(){}) // "object Function" ....
4.constructor通過(guò)檢測(cè)類型在原型鏈中的constructor指向來(lái)返回布爾值。
let arr =[] arr.constructor==Array // true let fun = function(){} fun.constructor==Function //true
注意:null和undefined是沒有constructor屬性的,可以用其他方法判斷。
通過(guò)幾這次的總結(jié),對(duì)于js的數(shù)據(jù)類型,以及如何檢測(cè)數(shù)據(jù)類型有了深刻的認(rèn)識(shí),下次面試不慌張~
以上就是詳解JavaScript中的數(shù)據(jù)類型,以及檢測(cè)數(shù)據(jù)類型的方法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 數(shù)據(jù)類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Javascript中eval函數(shù)的使用方法與示例
JavaScript有許多小竅門來(lái)使編程更加容易。其中之一就是eval()函數(shù),這個(gè)函數(shù)可以把一個(gè)字符串當(dāng)作一個(gè)JavaScript表達(dá)式一樣去執(zhí)行它。以下是它的說(shuō)明2007-04-04js數(shù)組方法擴(kuò)展實(shí)現(xiàn)數(shù)組統(tǒng)計(jì)函數(shù)
這篇文章主要介紹了js數(shù)組方法擴(kuò)展,實(shí)現(xiàn)數(shù)組統(tǒng)計(jì)函數(shù),需要的朋友可以參考下2014-04-04JavaScript中判斷對(duì)象類型的幾種方法總結(jié)
本篇文章是對(duì)JavaScript中判斷對(duì)象類型的幾種方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11緩動(dòng)函數(shù)requestAnimationFrame 更好的實(shí)現(xiàn)瀏覽器經(jīng)動(dòng)畫
requestAnimationFrame是什么?一直是我們大家所疑惑的,緩動(dòng)函數(shù)requestAnimationFrame 更好的實(shí)現(xiàn)瀏覽器經(jīng)動(dòng)畫,接下來(lái)將為大家詳細(xì)介紹2012-12-12JavaScript對(duì)HTML DOM使用EventListener進(jìn)行操作
這篇文章主要介紹了JavaScript對(duì)HTML DOM使用EventListener進(jìn)行操作的方法,用于向HTML元素中添加事件,需要的朋友可以參考下2015-10-10