Javascript檢測值
檢測原始值用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。
※尚學堂高琪Java300集視頻精華筆記
※創建對象的N種模式
※redis內部數據結構深入淺出
※8 面向對象之抽象類+介面+內部類
※Elasticsearch 與 Kafka 整合剖析
TAG:科技優家 |