js檢測資料型別

2022-05-23 01:30:17 字數 3989 閱讀 8644

一、js中資料型別

二、判斷資料型別

下面將對如下資料進行判斷它們的型別

var bool = true

var num = 1

var str = 'abc'

var und =undefined

var nul = null

var arr = [1,2,3]

var obj =

var fun = function()

1. 使用typeof

console.log(typeof bool); //

boolean

console.log(typeof num);//

number

console.log(typeof str);//

string

console.log(typeof und);//

undefined

console.log(typeof nul);//

object

console.log(typeof arr);//

object

console.log(typeof obj);//

object

console.log(typeof fun);//

function

結論:由結果可知typeof可以測試出```number```、```string```、```boolean```、```undefined```及```function```,而對於```null```及陣列、物件,typeof均檢測出為object,不能進一步判斷它們的型別。

2. 使用instanceof

console.log(bool instanceof boolean);//

false

console.log(num instanceof number);//

false

console.log(str instanceof string);//

false

console.log(und instanceof object);//

false

console.log(arr instanceof array);//

true

console.log(nul instanceof object);//

false

console.log(obj instanceof object);//

true

console.log(fun instanceof function);//

true

var bool2 = new

boolean()

console.log(bool2

instanceof boolean);//

true

var num2 = new

number()

console.log(num2

instanceof number);//

true

var str2 = new

string()

console.log(str2

instanceof string);//

true

function

person(){}

var per = new

person()

console.log(per

instanceof person);//

true

function

student(){}

student.prototype = new

person()

var haoxl = new

student()

console.log(haoxl

instanceof student);//

true

console.log(haoxl instanceof person);//

true

結論:從結果中看出instanceof不能區別undefined和null,而且對於基本型別如果不是用new宣告的則也測試不出來,對於是使用new宣告的型別,它還可以檢測出多層繼承關係。

3. 使用constructor

undefined和null沒有contructor屬性

console.log(bool.constructor === boolean);//

true

console.log(num.constructor === number);//

true

console.log(str.constructor === string);//

true

console.log(arr.constructor === array);//

true

console.log(obj.constructor === object);//

true

console.log(fun.constructor === function);//

true

console.log(haoxl.constructor === student);//

false

console.log(haoxl.constructor === person);//

true

結論:constructor不能判斷undefined和null,並且使用它是不安全的,因為contructor的指向是可以改變的

4. 使用object.prototype.tostring.call

console.log(object.prototype.tostring.call(bool));//

[object boolean]

console.log(object.prototype.tostring.call(num));//

[object number]

console.log(object.prototype.tostring.call(str));//

[object string]

console.log(object.prototype.tostring.call(und));//

[object undefined]

console.log(object.prototype.tostring.call(nul));//

[object null]

console.log(object.prototype.tostring.call(arr));//

[object array]

console.log(object.prototype.tostring.call(obj));//

[object object]

console.log(object.prototype.tostring.call(fun));//

[object function]

function

person(){}

function

student(){}

student.prototype = new

person()

var haoxl = new

student()

console.log(object.prototype.tostring.call(haoxl));

//[object object]

結論:原理(摘自高階程式設計3):在任何值上呼叫 object 原生的 tostring() 方法,都會返回乙個 [object nativeconstructorname] 格式的字串。每個類在內部都有乙個 [[class]] 屬性,這個屬性中就指定了上述字串中的建構函式名。

但是它不能檢測非原生建構函式的建構函式名。

js檢測資料型別

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

JS資料型別檢測

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

JS 資料型別檢測

tpeof val 用來檢測資料型別的運算子。基於typeof檢測出來的結果 首先是乙個字串 字串中是對應的型別 侷限性 typeof null object 但是null並不是物件 基於typeof 無法細分出當前值是普通物件還是陣列物件等,只要是物件型別,返回結果都是 object typeof...