论坛首页 入门技术论坛

Javascrpt的類型檢測

浏览 1270 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-20   最后修改:2008-11-21

<!----><!----> <!---->

眾所周知, 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
 
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics