您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關使用toString.call()如何實現判斷數據類型,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
大家都知道判斷數據類型的方法有很多。我們常用的有typeof但是,這個方法有一定的局限性。
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 無法區分null 數組和對象,通常我們會區分判斷Array和Object
有時會用instanceof 來判斷是不是一個對象的實例子
[] instanceof Array // true 這種方法可以判斷數組,不能區分對象 [] instanceof Object // true null instanceof Object // false 也不能區分null
下面介紹一種方法,對每一種數據類型都實用。
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]"
再來思考, toString.call([2]) 意思就是改變方法中的this指向,指向傳遞進去的參數,也就是[2]。那我這樣寫不是更直觀嗎?[2].toString()。結果
[2].toString() //"2"
var obj = {a: 67} console.log(obj.toString()) // [object Array]
對比上面兩個返回的值是不一樣的。這是因為[2].toString()調用的是數組的toSting()方法,而不是對象的toSting()方法。Array改寫了Object的toString方法。
toSting.call()實際上就是 Object.prototype.toSting.call()
console.log(Object.prototype.toString.call([33])) // [object Array]
而[2].toSting()實際上是
console.log(Array.prototype.toString.call([2])) //2
使用的過程中,可以這樣封裝函數
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")
看完上述內容,你們對使用toString.call()如何實現判斷數據類型有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。