JS資料型別檢測的坑和通用資料型別檢測方法

2021-10-22 14:29:07 字數 2068 閱讀 6025

3 將object.prototype.tostring封裝成易於使用的型別檢測方法

4 總結

typeof用法最簡單,直接在後面跟要檢測的值。它可以用來檢測除null之外的其它原生型別,但無法區分null和物件型別,原因是其在底層實現上是根據被檢測型別的二進位制前幾位來檢測的,而null和物件在底層的二進位制表示前3位都是000,因此無法區分。

typeof

null

// "object"

typeof

// "object"

typeof

/a*/

// "object"

為了彌補typeof的缺陷,後面人們使用instanceof。instanceof用來判斷某個例項是否屬於某一型別。它的實現原理是通過上溯例項的原型鏈來判斷是否屬於某型別。由於原型是可以被修改的,因此使用instanceof來檢測型別也不靠譜。而且instanceof也不能檢測基本型別。比如下面的例子:

let obj =

obj.__proto__ =

obj instanceof

array

// true

1instanceof

number

// false

constructor雖然支援基本型別,但因為物件的constructor也可以被隨意修改,因此也不靠譜

let obj =

obj.constructor = array

obj.constructor == array // true

object.prototype.tostring()方法返回的是"[object object]",也即object的型別字串,也被稱為stringtag,利用call()方法即可應用在需要被檢測型別的值上。該方法是比較完善的(唯一的小缺點就是無法區分原生型別和相應的包裝物件),但使用起來有點麻煩。實踐中,對於除null之外的原生型別,可使用typeof,其它情況再用stringtag方法。

object.prototype.tostring.

call

("a"

)// "[object string]"

object.prototype.tostring.

call

(string

("a"))

// "[object string]"

object.prototype.tostring.

call

(/a*/

)// "[object regexp]"

object.prototype.tostring.

call()

// "[object object]"

// 參考jquery的實現

(function()

let tostring = class2type.tostring

// 設定資料型別的對映表

let classes =

["number"

,"string"

,"bollean"

,"symbol"

,"null"

,"undefined"

,"object"

,"array"

,"regexp"

,"date"

,"error"

,"function"

] classes.

foreach

(name=>]`]

=name.

tolowercase()

})function

totype

(val)

window.totype = totype})

()

typeof函式雖然簡單易用,但存在無法分清null和object以及不能細分各種物件型別的缺陷,通過object.prototype.tostring.call()則能很好地彌補其不足,實踐中可以將二者結合使用或者基於object.prototype.tostring.call()直接封裝乙個簡易方法。

JS 資料型別的分類 和(檢測資料型別)

js裡面一切以雙引號或者單引號包裹的內容就是字串型別 注意點 1.在字串裡面包裹字串,要用不同的引號 2.不能單引號和雙引號混合使用 3.要注意區分變數名和字串 var num1 num1 console.log num1,num2 數學上一切的數字 01 13.14 作用 就是用來做數 算 con...

js檢測資料型別

要檢測乙個變數是不是基本資料型別?typeof 操作符是最佳的工具。說得更具體一 點,typeof 操作符是確定乙個變數是字串 數值 布林值,還是undefined 的最佳工具。如果變 量的值是乙個物件或null,則typeof 操作符會像下面例子中所示的那樣返回 object var s nich...

JS資料型別檢測

在js的日常使用中,經常需要檢測資料的型別,現在,就來看一下,js有哪些方法可以檢測資料的型別。typeof操作符返回乙個字串,表示未經計算的運算元的型別。typeof是js原生提供用來檢測型別的api,然而,並沒有什麼用。為什麼呢?因為,typeof不能準確地檢測出我們所想要知道的資料的型別。ty...