這篇文章主要為大家展示了“js中基于數(shù)據(jù)類型檢測的方式有哪些”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“js中基于數(shù)據(jù)類型檢測的方式有哪些”這篇文章吧。
10余年的華容網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整華容建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“華容網(wǎng)站設(shè)計”,“華容網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
1、typeof 用來檢測數(shù)據(jù)類型的運(yùn)算符
console.log(typeof 12)//Number
使用typeof檢測數(shù)據(jù)類型,首先返回的都是字符串 ,其次字符串中包含了對應(yīng)的數(shù)據(jù)類型
例如:"number"、"string"、"boolean"、"undefined"、"function"、"object"
console.log(typeof typeof function(){}) //string
局限性:
typeof null -> "object"
不能具體的細(xì)分是數(shù)組還是正則,還是對象中其他的值,因?yàn)槭褂胻ypeof檢測數(shù)據(jù)類型,對于對象數(shù)據(jù)類型中的值,最后返回的結(jié)果都是"object"
2、instanceof 檢測某一個實(shí)例是否屬于某個類
var obj = [12,23]; console.log(obj instanceof Array);
局限性:
對于基本數(shù)據(jù)類型來說,字面量方式創(chuàng)建出來的結(jié)果和實(shí)例方式創(chuàng)建出來的結(jié)果是有一定的區(qū)別的。從嚴(yán)格意義上講,只有實(shí)例創(chuàng)建出來的結(jié)果才是標(biāo)準(zhǔn)的對象數(shù)據(jù)類型值,也是標(biāo)準(zhǔn)的Number這個類的一個實(shí)例;對于字面量方式創(chuàng)建出來的結(jié)果是基本的數(shù)據(jù)類型值,不是嚴(yán)謹(jǐn)?shù)膶?shí)例,但是由于JS的松散特點(diǎn),導(dǎo)致了可以使用Number.prototype上的方法
1)、不能用來檢測和處理字面量方式創(chuàng)建出來的基本數(shù)據(jù)類型值
console.log(1 instanceof Number);//false console.log(new Number(1) instanceof Number)//true
2)、instanceof的特性:只要在當(dāng)前實(shí)例的原型鏈上,我們用其檢測的結(jié)果都為true
var ary = []; console.log(ary instanceof Array);//true console.log(ary instanceof Object);//true function fn(){ } console.log(fn instanceof Function);//true console.log(fn instanceof Object);//true
3、constructor 構(gòu)造函數(shù) 作用和instanceof非常的相似 constructor可以處理基本數(shù)據(jù)類型的檢測
constructor檢測Object和instanceof不一樣 一般情況下是檢測不了的
var obj = []; console.log(obj.constructor === Array)//true var num = 1; console.log(num.constructor === Number)//true
局限性:我們可以把類的原型進(jìn)行重寫,在重寫的過程中很有可能出現(xiàn)把之前的constructor給覆蓋掉了,這樣檢測出來的結(jié)果就不準(zhǔn)確了。
對于特殊的數(shù)據(jù)類型null和undefined,他們所屬的類是Null和Undefined,但是瀏覽器把這兩個類保護(hù)起來了,不允許我們在外面訪問使用
4、Object.prototype.toString.call() 最準(zhǔn)確最常用的方式 各種類型的都可以檢測(基本和引用)
首先獲取Object原型上的toString方法,讓方法執(zhí)行,并且改變方法中的this關(guān)鍵字的指向
toString的理解:
表面上看應(yīng)該是轉(zhuǎn)化成字符串,但是某些toString方法不僅僅是轉(zhuǎn)換為字符串
對于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是把當(dāng)前的數(shù)據(jù)類型轉(zhuǎn)化為字符串的類型(他們的作用僅僅是用來轉(zhuǎn)換為字符串的)
Object.prototype.toString()并不是用來轉(zhuǎn)化為字符串的,他的作用是返回當(dāng)前方法執(zhí)行主體(方法中的this)所屬類的詳細(xì)信息。
({name:"李四"}).toString() //[object object] Math.toString()//[object Math]
({name:"李四"}).toString() //[object object] Math.toString()//[object Math] var obj = {name:"張三"}; console.log(obj.toString())//toString中的this是obj,返回的是obj所屬的類的信息。[object Object] 第一個object代表當(dāng)前實(shí)例是對象數(shù)據(jù)類型的(這個是固定的),第二個Object代表的是obj所屬的類是Object
console.log((1).toString()) // "1" Number.prototype.toString轉(zhuǎn)化為字符串
console.log((128).toString(2/8/10)) 把數(shù)字轉(zhuǎn)化為2進(jìn)制、8進(jìn)制、10進(jìn)制
所以上面的方法的檢測如下
var ary = []; console.log(Object.prototype.toString.call(ary))//[object Array]
以上是“js中基于數(shù)據(jù)類型檢測的方式有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!