js學(xué)習(xí)總結(jié)_基于數(shù)據(jù)類型檢測(cè)的四種方式(必看)
1、typeof 用來(lái)檢測(cè)數(shù)據(jù)類型的運(yùn)算符
console.log(typeof 12)//Number
使用typeof檢測(cè)數(shù)據(jù)類型,首先返回的都是字符串 ,其次字符串中包含了對(duì)應(yīng)的數(shù)據(jù)類型
例如:"number"、"string"、"boolean"、"undefined"、"function"、"object"
console.log(typeof typeof function(){}) //string
局限性:
typeof null -> "object"
不能具體的細(xì)分是數(shù)組還是正則,還是對(duì)象中其他的值,因?yàn)槭褂胻ypeof檢測(cè)數(shù)據(jù)類型,對(duì)于對(duì)象數(shù)據(jù)類型中的值,最后返回的結(jié)果都是"object"
2、instanceof 檢測(cè)某一個(gè)實(shí)例是否屬于某個(gè)類
var obj = [12,23]; console.log(obj instanceof Array);
局限性:
對(duì)于基本數(shù)據(jù)類型來(lái)說(shuō),字面量方式創(chuàng)建出來(lái)的結(jié)果和實(shí)例方式創(chuàng)建出來(lái)的結(jié)果是有一定的區(qū)別的。從嚴(yán)格意義上講,只有實(shí)例創(chuàng)建出來(lái)的結(jié)果才是標(biāo)準(zhǔn)的對(duì)象數(shù)據(jù)類型值,也是標(biāo)準(zhǔn)的Number這個(gè)類的一個(gè)實(shí)例;對(duì)于字面量方式創(chuàng)建出來(lái)的結(jié)果是基本的數(shù)據(jù)類型值,不是嚴(yán)謹(jǐn)?shù)膶?shí)例,但是由于JS的松散特點(diǎn),導(dǎo)致了可以使用Number.prototype上的方法
1)、不能用來(lái)檢測(cè)和處理字面量方式創(chuàng)建出來(lái)的基本數(shù)據(jù)類型值
console.log(1 instanceof Number);//false console.log(new Number(1) instanceof Number)//true
2)、instanceof的特性:只要在當(dāng)前實(shí)例的原型鏈上,我們用其檢測(cè)的結(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ù)類型的檢測(cè)
constructor檢測(cè)Object和instanceof不一樣 一般情況下是檢測(cè)不了的
var obj = []; console.log(obj.constructor === Array)//true var num = 1; console.log(num.constructor === Number)//true
局限性:我們可以把類的原型進(jìn)行重寫,在重寫的過(guò)程中很有可能出現(xiàn)把之前的constructor給覆蓋掉了,這樣檢測(cè)出來(lái)的結(jié)果就不準(zhǔn)確了。
對(duì)于特殊的數(shù)據(jù)類型null和undefined,他們所屬的類是Null和Undefined,但是瀏覽器把這兩個(gè)類保護(hù)起來(lái)了,不允許我們?cè)谕饷嬖L問(wèn)使用
4、Object.prototype.toString.call() 最準(zhǔn)確最常用的方式 各種類型的都可以檢測(cè)(基本和引用)
首先獲取Object原型上的toString方法,讓方法執(zhí)行,并且改變方法中的this關(guān)鍵字的指向
toString的理解:
表面上看應(yīng)該是轉(zhuǎn)化成字符串,但是某些toString方法不僅僅是轉(zhuǎn)換為字符串
對(duì)于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是把當(dāng)前的數(shù)據(jù)類型轉(zhuǎn)化為字符串的類型(他們的作用僅僅是用來(lái)轉(zhuǎn)換為字符串的)
Object.prototype.toString()并不是用來(lái)轉(zhuǎn)化為字符串的,他的作用是返回當(dāng)前方法執(zhí)行主體(方法中的this)所屬類的詳細(xì)信息?! ?/p>
({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] 第一個(gè)object代表當(dāng)前實(shí)例是對(duì)象數(shù)據(jù)類型的(這個(gè)是固定的),第二個(gè)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)制
所以上面的方法的檢測(cè)如下
var ary = []; console.log(Object.prototype.toString.call(ary))//[object Array]
以上這篇js學(xué)習(xí)總結(jié)_基于數(shù)據(jù)類型檢測(cè)的四種方式(必看)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- JS中檢測(cè)數(shù)據(jù)類型的幾種方式及優(yōu)缺點(diǎn)小結(jié)
- 淺談javascript的數(shù)據(jù)類型檢測(cè)
- 關(guān)于JS數(shù)據(jù)類型檢測(cè)的多種方式總結(jié)
- js數(shù)據(jù)類型檢測(cè)總結(jié)
- JavaScript中檢測(cè)數(shù)據(jù)類型的四種方法
- javascript基本數(shù)據(jù)類型及類型檢測(cè)常用方法小結(jié)
- 在javaScript中檢測(cè)數(shù)據(jù)類型的幾種方式小結(jié)
- JavaScript數(shù)據(jù)類型檢測(cè)代碼分享
- JS數(shù)組索引檢測(cè)中的數(shù)據(jù)類型問(wèn)題詳解
- js中各種數(shù)據(jù)類型檢測(cè)和判定的實(shí)戰(zhàn)示例
相關(guān)文章
100多個(gè)基礎(chǔ)常用JS函數(shù)和語(yǔ)法集合大全
本文將介紹100多個(gè)基礎(chǔ)常用JS函數(shù)和語(yǔ)法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02Flex通過(guò)JS獲取客戶端IP和計(jì)算機(jī)名的實(shí)例代碼
這篇文章主要介紹了Flex通過(guò)JS獲取客戶端IP和計(jì)算機(jī)名的實(shí)例代碼,有需要的朋友可以參考一下2013-11-11javaScript給元素添加多個(gè)class的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇javaScript給元素添加多個(gè)class的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07JavaScript實(shí)現(xiàn)煙花和福字特效
這篇文章主要介紹了利用JavaScript實(shí)現(xiàn)放煙花特效和用字符“$”繪制“福”字,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以學(xué)習(xí)一下2022-01-01ElementPlus?Tag標(biāo)簽用法小結(jié)
這篇文章主要介紹了ElementPlus?Tag標(biāo)簽用法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09JS+HTML5本地存儲(chǔ)Localstorage實(shí)現(xiàn)注冊(cè)登錄及驗(yàn)證功能示例
這篇文章主要介紹了JS+HTML5本地存儲(chǔ)Localstorage實(shí)現(xiàn)注冊(cè)登錄及驗(yàn)證功能,結(jié)合實(shí)例形式分析了基于JS+HTML5本地存儲(chǔ)Localstorage實(shí)現(xiàn)注冊(cè)登錄及驗(yàn)證相關(guān)操作技巧,需要的朋友可以參考下2020-02-02Bootstrap免費(fèi)字體和圖標(biāo)網(wǎng)站(值得收藏)
在這篇內(nèi)容中,我們把這套框架上的免費(fèi)字體圖標(biāo)做了個(gè)整合(當(dāng)然,以后還會(huì)不斷的更新)。大家對(duì)bootstrap免費(fèi)字體圖標(biāo)有需要的話,可以參考本教程2017-03-03javascript 中的console.log和彈出窗口alert
這篇文章主要介紹了javascript 中的console.log和彈出窗口alert 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友參考下吧2016-08-08