JS型別判斷

2022-01-18 01:50:24 字數 1719 閱讀 3568

關於js中的一些型別確定,盡量使用object.prototype.tostring.call(obj)  去判定型別,使用typeof會有一些缺陷。

typeof不能準確判斷乙個物件變數null的結果也是 object,array的結果也是 object

1

object.prototype.tostring.call(undefined)

2 "[object undefined]"

3object.prototype.tostring.call(nan)

4 "[object number]"

5 object.prototype.tostring.call('')

6 "[object string]"

7object.prototype.tostring.call()

8 "[object array]"

9 object.prototype.tostring.call(null

)10 "[object null]"

11typeof

(undefined)

12 "undefined"

13typeof(null

)14 "object"

15typeof

()16 "object"

17typeof('')

18 "string"

19typeof

(nan)

20 "number"

同樣是檢測物件obj呼叫tostring方法(,obj.tostring()的結果和object.prototype.tostring.call(obj)的結果不一樣,這是為什麼?

這是因為tostring為object的原型方法,而array,function等型別作為object的例項,都重寫了tostring方法。不同的物件型別呼叫tostring方法時,根據原型鏈的知識,呼叫的是對應的重寫之後的tostring方法(function型別返回內容為函式體的字串,array型別返回元素組成的字串.....),而不會去呼叫object上原型tostring方法(返回物件的具體型別),所以採用obj.tostring()不能得到其物件型別,只能將obj轉換為字串型別;因此,在想要得到物件的具體型別時,應該呼叫object上原型tostring方法。

var arr=[1,2,3];

console.log(array.prototype.hasownproperty("tostring"));//

true

console.log(arr.tostring());//

1,2,3

delete array.prototype.tostring;//

delete操作符可以刪除例項屬性

console.log(array.prototype.hasownproperty("tostring"));//

false

console.log(arr.tostring());//

"[object array]"

刪除了array的tostring方法後,同樣再採用arr.tostring()方法呼叫時,不再有遮蔽object原型方法的例項方法,因此沿著原型鏈,arr最後呼叫了object的tostring方法,返回了和object.prototype.tostring.call(arr)相同的結果。

js型別判斷

typeoftypeof 返回值有七種可能 number,string,boolean,object,function,undefined,symbol 侷限性 對於array,null等特殊物件使用typeof一律返回object。numbers typeof 37 number typeof m...

js型別判斷

js型別判斷,有如下三種 1 typeof 2 instanceof 3 object.prototype.tostring.call 4 arg.proto contructor.name 以判斷陣列為例,有如下幾種方法 function isarray arg return arg instan...

判斷JS型別

一 js的型別 js的基本型別共有七種 bigint bigint是一種內建物件,是處symbol外的第二個內建型別 number string boolen symbol undefined null。複雜資料型別有物件 object 包括基本的物件 函式 function 陣列 array 和內...