Javascrpt的類型檢測

眾所周知, js 是弱類型語言。定義任何類型的變量都用 var 關鍵字,如果只是聲明變量,卻沒有給其賦值。那么誰也不知道這個變量是啥類型的。

如下:

var abc;//定義一個變量abc,卻沒有給其賦值

Java 中卻不同,定義一個變量后,馬上就知道了變量的類型和變量所占的內存大小。看似沒給 abc 賦值,實際上 java 會給其一個默認值(這裡是 0 ),當然 abc 定義在一個方法中沒有賦值的話編譯是通不過的。

如下:

int abc;//定義一個整數型變量abc,占4個字節

好了,回到主題。 Js 中檢測類型用 typeof ,對于內置類型,這是最常見的

alert(typeof 3);//輸出”number”

alert(typeof 'hello');//輸出”string”

alert(typeof false);//輸出”boolean”

alert(typeof undefined);//輸出”undefined”,這也是基本類型之一

alert(typeof null);//輸出”object”,沒有輸出”null”,據說是js實現時的一個錯誤

對於對象,數組用 typeof ,輸出的都是 ”object”

function User(name) {//定義一個類
    this.name = name;
}
var u1 = new User('jack');//創建一個對象
alert(typeof  u1);//輸出”object”

var ary = [1,3,5];//定義一個數組
alert(typeof ary); //輸出”object”

那么怎么能區分出是某個具體類型的對象,可以用 對象的 construtor屬性

alert(u1. constructor == User);//輸出true

alert(ary. constructor == User);//輸出false

alert(ary. constructor == Array);//輸出true

 

Js 提供了 instanceof 運算符來檢測某個對象屬於某個具體的類型,實際上它也是使用對象的 constructor

 alert(u1 instanceof User);//true

alert(u1 instanceof Array);//false
補充:

function fun() {//js還有一個特殊對象--函數

}

alert(typeof fun);//輸出function,而非object

你可能感兴趣的:(js,类型检测)