toString.call()通用的判斷數(shù)據(jù)類型方法示例
大家都知道判斷數(shù)據(jù)類型的方法有很多。我們常用的有typeof但是,這個(gè)方法有一定的局限性。
typeof null // "object" typeof [8] // "object" typeof {} // "object" typeof function(){} // "function" typeof 2 //"number" typeof "" //"string" typeof true //"boolean" typeof undefined //"undefined" typeof Symbol(2) // "symbol"
typeof 無(wú)法區(qū)分null 數(shù)組和對(duì)象,通常我們會(huì)區(qū)分判斷Array和Object
有時(shí)會(huì)用instanceof 來(lái)判斷是不是一個(gè)對(duì)象的實(shí)例子
[] instanceof Array // true 這種方法可以判斷數(shù)組,不能區(qū)分對(duì)象 [] instanceof Object // true null instanceof Object // false 也不能區(qū)分null
下面介紹一種方法,對(duì)每一種數(shù)據(jù)類型都實(shí)用。
toString.call(function(){}) // "[object Function]" toString.call(null) //"[object Null]" toString.call([2]) "[object Array]" toString.call(undefined) //"[object Undefined]" toString.call('stjd') //"[object String]" toString.call(1) //"[object Number]" toString.call(true) //"[object Boolean]" toString.call(Symbol(3)) // "[object Symbol]" toString.call({q:8}) //"[object Object]"
再來(lái)思考, toString.call([2]) 意思就是改變方法中的this指向,指向傳遞進(jìn)去的參數(shù),也就是[2]。那我這樣寫(xiě)不是更直觀嗎?[2].toString()。結(jié)果
[2].toString() //"2"
var obj = {a: 67} console.log(obj.toString()) // [object Array]
對(duì)比上面兩個(gè)返回的值是不一樣的。這是因?yàn)閇2].toString()調(diào)用的是數(shù)組的toSting()方法,而不是對(duì)象的toSting()方法。Array改寫(xiě)了Object的toString方法。
toSting.call()實(shí)際上就是 Object.prototype.toSting.call()
console.log(Object.prototype.toString.call([33])) // [object Array]
而[2].toSting()實(shí)際上是
console.log(Array.prototype.toString.call([2])) //2
使用的過(guò)程中,可以這樣封裝函數(shù)
function isType(type) { return function(obj) { return {}.toString.call(obj) == "[object " + type + "]" } } var isObject = isType("Object") var isString = isType("String") var isArray = Array.isArray || isType("Array") var isFunction = isType("Function") var isUndefined = isType("Undefined")
總結(jié)
到此這篇關(guān)于toString.call()通用的判斷數(shù)據(jù)類型方法的文章就介紹到這了,更多相關(guān)toString.call()判斷數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 用Object.prototype.toString.call(obj)檢測(cè)對(duì)象類型原因分析
- js和jquery判斷數(shù)據(jù)類型的4種方法總結(jié)
- js判斷數(shù)據(jù)類型如判斷是否為數(shù)組是否為字符串等等
- js 判斷各種數(shù)據(jù)類型的簡(jiǎn)單方法(推薦)
- js 判斷數(shù)據(jù)類型的幾種方法
- Javascript如何判斷數(shù)據(jù)類型和數(shù)組類型
- js的各種數(shù)據(jù)類型判斷的介紹
- JavaScript中判斷數(shù)據(jù)類型的方法總結(jié)
- 淺談js數(shù)據(jù)類型判斷與數(shù)組判斷
- 判斷js數(shù)據(jù)類型的函數(shù)實(shí)例詳解
相關(guān)文章
JavaScript 阻塞方式實(shí)現(xiàn)異步任務(wù)隊(duì)列
本文主要介紹了JavaScript 阻塞方式實(shí)現(xiàn)異步任務(wù)隊(duì)列,主要介紹了兩種方案,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05JavaScript生成隨機(jī)驗(yàn)證碼代碼實(shí)例
這篇文章主要介紹了JavaScript生成隨機(jī)驗(yàn)證碼代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09p5.js實(shí)現(xiàn)動(dòng)態(tài)圖形臨摹
這篇文章主要為大家詳細(xì)介紹了p5.js實(shí)現(xiàn)動(dòng)態(tài)圖形臨摹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10JavaScript面向?qū)ο蟪绦蛟O(shè)計(jì)創(chuàng)建對(duì)象的方法分析
這篇文章主要介紹了JavaScript面向?qū)ο蟪绦蛟O(shè)計(jì)創(chuàng)建對(duì)象的方法,結(jié)合實(shí)例形式分析了javascript使用object構(gòu)造函數(shù)和對(duì)象字面量來(lái)創(chuàng)建對(duì)象的相關(guān)操作技巧,需要的朋友可以參考下2018-08-08JS中數(shù)學(xué)計(jì)算精度問(wèn)題的解決方案
這篇文章主要給大家介紹了JS中數(shù)學(xué)計(jì)算精度問(wèn)題的解決方案,文中通過(guò)代碼示例和圖文結(jié)合給大家講解非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12javascript 網(wǎng)頁(yè)跳轉(zhuǎn)的方法
昨天練習(xí)的時(shí)候正好要用到跳轉(zhuǎn)代碼,在網(wǎng)上找了一下,覺(jué)得下面幾個(gè)不錯(cuò)...整理了一下發(fā)上來(lái)...2008-12-12