js判斷類型


判斷JS類型,有以下幾種方法:1、typeof 2、object.property.toString.call 3、instance of。

(一)JS的類型

JS的基本類型共有七種:bigInt(bigInt是一種內置對象,是處symbol外的第二個內置類型)、number、string、boolen、symbol、undefined、null。復雜數據類型有對象(object)包括基本的對象、函數(Function)、數組(Array)和內置對象(Data等)。

(二)判斷JS的類型

方法一、typeof方法

基本數據類型除了null外都返回對應類型的字符串。

typeof 1 // "number" typeof 'a' // "string" typeof true // "boolean" typeof undefined // "undefined" typeof Symbol() // "symbol" typeof 42n // "bigint" 

注:判斷一個變量是否被聲明可以用(typeof 變量 === “undefined”)來判斷

null返回“object”

typeof null // "object" 

因為歷史遺留的原因。typeof null 嘗試返回為null失敗了,所以要記住,typeof null返回的是object。

特殊值NaN返回的是 "number"

typeof NaN // "number" 

而復雜數據類型里,除了函數返回了"function"其他均返回“object”

typeof({a:1}) // "object" 普通對象直接返回“object” typeof [1,3] // 數組返回"object" typeof(new Date) // 內置對象 "object" 

函數返回"function"

typeof function(){} // "function" 

所以我們可以發現,typeof可以判斷基本數據類型,但是難以判斷除了函數以外的復雜數據類型。於是我們可以使用第二種方法,通常用來判斷復雜數據類型,也可以用來判斷基本數據類型。

方法二、object.property.toString.call方法 ,他返回"[object, 類型]",注意返回的格式及大小寫,前面是小寫,后面是首字母大寫。

基本數據類型都能返回相應的類型。

Object.prototype.toString.call(999) // "[object Number]" Object.prototype.toString.call('') // "[object String]" Object.prototype.toString.call(Symbol()) // "[object Symbol]" Object.prototype.toString.call(42n) // "[object BigInt]" Object.prototype.toString.call(null) // "[object Null]" Object.prototype.toString.call(undefined) // "[object Undefined]" Object.prototype.toString.call(true) // "[object Boolean] 

復雜數據類型也能返回相應的類型

Object.prototype.toString.call({a:1}) // "[object Object]" Object.prototype.toString.call([1,2]) // "[object Array]" Object.prototype.toString.call(new Date) // "[object Date]" Object.prototype.toString.call(function(){}) // "[object Function]" 

這個方法可以返回內置類型

方法三、obj instanceof Object ,可以左邊放你要判斷的內容,右邊放類型來進行JS類型判斷,只能用來判斷復雜數據類型,因為instanceof 是用於檢測構造函數(右邊)的 prototype 屬性是否出現在某個實例對象(左邊)的原型鏈上。

[1,2] instanceof Array // true (function(){}) instanceof Function // true ({a:1}) instanceof Object // true (new Date) instanceof Date // true 

obj instanceof Object方法也可以判斷內置對象。

缺點:在不同window或者iframe間,不能使用instanceof。

其他方法:除了以上三種方法,還有constructor方法 和 duck type方法,具體在文章就不介紹了,個人覺得吃透分清上面三種方法已經足夠了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM