這次為大家帶來web開發中怎樣偵測引用值,web開發中偵測引用值的注意事項有哪些,以下就是實戰案例,一起來看一下。
引用值也稱為物件(object)。在JS中除了原始值之外的值都是引用。有這樣幾種內建的參考類型:Object、Array、Date和Error,數量不多。 typeof運算子在判斷這些引用型別時顯得力不從心,因為所有物件都會回傳"object"。
typeof另外一種不建議的用法是當檢測null的類型時,typeof運算子用於null時將全回傳"object"。這看起來很怪異,被認為是標準規範的嚴重bug,因此在程式設計時要杜絕使用typeof來偵測null的類型。
偵測某個參考值的類型的最佳方法是使用instanceof運算子。 instanceof的基本語法是:value instanceof constructor。
instanceof的一個有趣的特性是它不僅偵測建構這個物件的建構器,還偵測原型鏈。原型鏈包含了許多訊息,包括定義物件所採用的繼承模式。例如,預設情況下,每個物件都繼承自Object,因此每個物件的value instanceof Object都會回傳true。因為這個原因,使用value instanceof Object來判斷物件是否屬於某個特定類型的做法並非最佳。
instanceof運算子也可以偵測自訂的類型,例如:
function Person (name) { this.name = name; }var me = new Person('Nicholas');console.log(me instanceof Object); // trueconsole.log(me instanceof Person); // true
在JS中偵測自訂類型時,最好的做法就是使用instanceof運算符,這也是唯一的方法。同樣對於內建JS類型也是如此(使用instanceof運算子)。但是,有一個嚴重的限制。
假設一個瀏覽器幀(frameA)裡的一個物件被傳入到另一個幀(frameB)中。兩個幀裡都定義了建構函式Person。如果來自幀A的物件是幀A的Person的實例,則如下規則成立。
frameAPersonInstance instanceof frameAPerson; // trueframeAPersonInstance instanceof frameBPerson; // false
因為每個幀(frame)都擁有Person的一份拷貝,它被認為是該幀(frame)中的Person的拷貝實例,儘管兩個定義可能完全一樣的。這個問題不僅出現在自訂類型身上,其他兩個非常重要的內建類型也有這個問題:函數和陣列。對於這兩個類型來說,一般用不著使用instanceof。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
#以上是web開發中怎樣檢測引用值的詳細內容。更多資訊請關注PHP中文網其他相關文章!