這是使用in
operator的表達式。 in
運算符檢查目標對象是否具有給定名稱的屬性(直接或通過對象的原型)。
它在做什麼看到如果document.documentElement
有一個名稱爲getBoundingClientRect
(這是一個方便的功能,如果瀏覽器提供它,jQuery會使用它)。
它是如何不同於if(document.documentElement.getBoundingClientRect) { // do something... }
in
不需要取的值的屬性,只是檢查它的存在。另請注意,您列出的第二種形式將測試該房產的價值的真實性。對於像getBoundingClientRect
這樣的函數來說很好,但如果你想測試其值可能回覆錯誤的東西(0
,""
等),即使該屬性存在,它也會失敗。
進行功能檢測時,您會看到很多這類事情。舉例來說,如果你想知道,如果瀏覽器支持HTML5的placeholder
屬性:
if ('placeholder' in document.createElement('input')) {
// Yes, it does
}
這是一個例子,我們不能使用的形式if (document.createElement('input').placeholder)
,因爲如果條件是假的,我們不知道是否它是虛假的,因爲該屬性不存在,或者是虛假的,因爲該屬性存在但是具有虛假值(並且placeholder
的默認值是""
,這確實是錯誤的)。
Gratuitous link to list of feature detections.
非常感謝。現在很明顯:) –
@ GauthamRenganathan:很好,這很有幫助。 –