![](/img/trans.png)
[英]What's the correct way to test for existence of a property on a JavaScript Object?
[英]What's the correct/proper way to test if an object is a jQuery object in javascript?
我正在編寫一個javascript函數,並且在“緊湊”的javascript設計方式中,參數的類型/長度會改變函數的行為。 一個可能的參數類型是一個jQuery對象,我想要非常特殊的邏輯。
測試對象是否是jQuery實例的最佳方法是什么?
取決於jQuery的內部工作原理,但我會選擇
obj instanceof jQuery
這是實現它的最“JavaScript方式”。 請記住,在窗口/框架邊界之間傳遞對象時會失敗!
托馬拉克的建議
'jquery' in obj
在這種情況下應該仍然可以工作,所以如果你希望進行多窗口數據交換,你應該使用它。 我不推薦它作為一般解決方案,因為只是尋找名為'jquery'
的屬性並不是非常可靠。
如果obj
是原語, in
運算符也會拋出錯誤。 如果不希望出現此行為,您可以考慮使用以下測試之一:
obj && obj.jquery
'jquery' in Object(obj)
我發現第二個更吸引人,但第一個可能會更快。
檢查
Object(obj).hasOwnProperty('jquery')
將失敗,因為jQuery對象只從其原型繼承屬性。
我也不鼓勵在JavaScript中使用constructor
屬性進行類型檢查 - 它可能對jQuery可靠地工作,但由於constructor
只是構造函數在實例化時的prototype
屬性所指向的對象的屬性,因此有很多方法可以搞亂了這樣的測試......
作為旁注:
jQuery本身檢查obj && obj.jquery
。 它甚至不使用instanceof
一次。 相反,它使用typeof
,duck-typing和toString.call()
進行類型檢查,這應該在instanceof
失敗的instanceof
工作。
此外,從不使用hasOwnProperty()
。 我不確定這說明jQuery庫的代碼質量;)
使用this而不是instanceof來測試jQuery對象。
/**
* @see http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak
* @return Boolean True if object is of type jQuery, false otherwise
*/
function isjQuery(obj) {
return obj && obj.hasOwnProperty && obj instanceof jQuery;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.