當前位置:
首頁 > 知識 > Javascript檢測值

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:科技優家 |