Javascript檢測值

編程語言 JavaScript ECMAScript Safari 科技優家 2017-06-15

檢測原始值用typeof

javascript有五種原始類型,分別為字符串、數字、布爾值、null和undefined

判斷一個值是什麼類型的字符串,可以通過typeof

typeof variable

//檢測字符串
if(typeof name == “string”){
    anotherName = name.substring(3);
}

檢測引用值(對象)用instanceof

javascript中除了原始值之外的值都是引用,有這樣幾種內置的引用類型: Object Array Date 和Error,使用typeof判斷所有引用類型時都返回object

檢測某個引用類型值得最好方法是使用instanceof運算符

value instanceof constructor

//檢測日期
if(value instanceof Date){
    console.log(value.getFullYear);
}

檢測函數最好的方法是用typeof

檢測函數用typeof,因為它可以跨幀(frame)使用,從技術的角度來說,javascript中的函數也是引用類型,同樣存在function構造函數每個函數都是其實例

function myFunc{}
console.log(typeof myFunc === “function”);//true

檢測數組用Array.isArray

開發者發現在instanceof Array在跨域問題幀(frame)之間來回傳遞數組不總是返回正確的結果

//採用鴨式辯型的方法檢測數組
function isArray(value){
    return typeof value.sort === “function”;
}

"鴨式辯型”是作家James Whitcomb Riley 首先提出的概念,即“像鴨子一樣走路,游泳並且嘎嘎叫的鳥就是鴨子”,本質上關注“對象能做什麼”,而不是關注“對象是什麼” 檢測數組有很多解決方案,現在ECMAScript5將Array.isArray正式引入Javascript,唯一的目的就是準確的檢測一個值是否為空。IE 9+、FireFox 4+、Safari 5+、Opera 10.5+、Chrome 都實現了Array.isArray方法。

檢測屬性使用in運算符

另外一種用到的null以及undefined的場景是當檢測一個屬性是否在對象中存在是,這個時候判斷就會導致錯誤,判斷屬性是否存在的最好方法是使用in運算符。比如

var object={
    count:0,
    related:null
};
if(“count” in object){
    //something code
}
if(“related” in object){
    //something code
}

如果只想檢查實例對象的某個屬性是否存在,則使用hasOwnProperty方法。

//對於所有非DOM對象來說,這是最好的寫法
if(object.hasOwnProperty(“related”)){
    //something code
}
//如果你不確定是否為DOM對象,則可以這樣寫
if(“hasOwnProperty” in Object && object.hasOwnProperty(‘related’)){
    //something code
}

檢測undefined和null用絕對等於===

Undefined類型只有一個值,即undefined。當聲明的變量還未被初始化時,變量的默認值為undefined。 Null類型也只有一個值,即null。null用來表示尚未存在的對象,常用來表示函數企圖返回一個不存在的對象。

ECMAScript認為undefined是從null派生出來的,所以把它們定義為相等的。但是,如果在一些情況下,我們一定要區分這兩個值,那應該怎麼辦呢?可以使用下面的兩種方法。

 
alert(null === undefined); //output "false"  
alert(typeof null == typeof undefined); //output "false"  

使用typeof方法在前面已經講過,null與undefined的類型是不一樣的,所以輸出"false"。而===代表絕對等於,在這裡null === undefined輸出false。

相關推薦

推薦中...