檢測(cè)原始值用typeof
javascript有五種原始類(lèi)型委粉,分別為字符串茎辐、數(shù)字叫挟、布爾值旁趟、null和undefined
判斷一個(gè)值是什么類(lèi)型的字符串昼激,可以通過(guò)typeof
typeof variable
//檢測(cè)字符串
if(typeof name == “string”){
anotherName = name.substring(3);
}
檢測(cè)引用值(對(duì)象)用instanceof
javascript中除了原始值之外的值都是引用,有這樣幾種內(nèi)置的引用類(lèi)型: Object Array Date 和Error锡搜,使用typeof判斷所有引用類(lèi)型時(shí)都返回object
檢測(cè)某個(gè)引用類(lèi)型值得最好方法是使用instanceof運(yùn)算符
value instanceof constructor
//檢測(cè)日期
if(value instanceof Date){
console.log(value.getFullYear());
}
檢測(cè)函數(shù)最好的方法是用typeof
檢測(cè)函數(shù)用typeof橙困,因?yàn)樗梢钥鐜?frame)使用,從技術(shù)的角度來(lái)說(shuō)耕餐,javascript中的函數(shù)也是引用類(lèi)型凡傅,同樣存在function構(gòu)造函數(shù)每個(gè)函數(shù)都是其實(shí)例
function myFunc(){}
console.log(typeof myFunc === “function”);//true
檢測(cè)數(shù)組用Array.isArray()
開(kāi)發(fā)者發(fā)現(xiàn)在instanceof Array在跨域問(wèn)題幀(frame)之間來(lái)回傳遞數(shù)組不總是返回正確的結(jié)果
//采用鴨式辯型的方法檢測(cè)數(shù)組
function isArray(value){
return typeof value.sort === “function”;
}
"鴨式辯型”是作家James Whitcomb Riley 首先提出的概念,即“像鴨子一樣走路肠缔,游泳并且嘎嘎叫的鳥(niǎo)就是鴨子”夏跷,本質(zhì)上關(guān)注“對(duì)象能做什么”,而不是關(guān)注“對(duì)象是什么”
檢測(cè)數(shù)組有很多解決方案明未,現(xiàn)在ECMAScript5將Array.isArray()正式引入Javascript槽华,唯一的目的就是準(zhǔn)確的檢測(cè)一個(gè)值是否為空。IE 9+趟妥、FireFox 4+猫态、Safari 5+、Opera 10.5+披摄、Chrome 都實(shí)現(xiàn)了Array.isArray()方法亲雪。
檢測(cè)屬性使用in運(yùn)算符
另外一種用到的null以及undefined的場(chǎng)景是當(dāng)檢測(cè)一個(gè)屬性是否在對(duì)象中存在是,這個(gè)時(shí)候判斷就會(huì)導(dǎo)致錯(cuò)誤行疏,判斷屬性是否存在的最好方法是使用in運(yùn)算符匆光。比如
var object={
count:0,
related:null
};
if(“count” in object){
//something code
}
if(“related” in object){
//something code
}
如果只想檢查實(shí)例對(duì)象的某個(gè)屬性是否存在,則使用hasOwnProperty()方法酿联。
//對(duì)于所有非DOM對(duì)象來(lái)說(shuō)终息,這是最好的寫(xiě)法
if(object.hasOwnProperty(“related”)){
//something code
}
//如果你不確定是否為DOM對(duì)象夺巩,則可以這樣寫(xiě)
if(“hasOwnProperty” in Object && object.hasOwnProperty(‘related’)){
//something code
}
檢測(cè)undefined和null用絕對(duì)等于===
Undefined類(lèi)型只有一個(gè)值,即undefined周崭。當(dāng)聲明的變量還未被初始化時(shí)柳譬,變量的默認(rèn)值為undefined。
Null類(lèi)型也只有一個(gè)值续镇,即null美澳。null用來(lái)表示尚未存在的對(duì)象,常用來(lái)表示函數(shù)企圖返回一個(gè)不存在的對(duì)象摸航。
ECMAScript認(rèn)為undefined是從null派生出來(lái)的制跟,所以把它們定義為相等的。但是酱虎,如果在一些情況下雨膨,我們一定要區(qū)分這兩個(gè)值,那應(yīng)該怎么辦呢读串?可以使用下面的兩種方法聊记。
alert(null === undefined); //output "false"
alert(typeof null == typeof undefined); //output "false"
使用typeof方法在前面已經(jīng)講過(guò),null與undefined的類(lèi)型是不一樣的恢暖,所以輸出"false"排监。而===代表絕對(duì)等于,在這里null === undefined輸出false杰捂。