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

