2017-02-18 71 views
6

我在控制檯中運行以下行(一次jQuery腳本已經加載),並取得了以下成果:

$(this) 
> [Window] 
$(this) != $(this) 
> true 
$(this) == $(this) 
> false 
$(this) === $(this) 
> false 

而且我不知道採取什麼步驟弄清楚是怎麼回事上。我的猜測是,有一些對象持有基於時間的值正在改變,但我想知道它是不同的。我會嘗試比較這些值,但我希望有人能夠理解這裏發生的事情。

編輯,以解決我不知道底層實現的$(ARG)的點。我不知道它返回了一個新的參考對象。因此,我不認爲這是「如何確定兩個JavaScript對象的平等?」的重複。

+0

http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects – j08691

+1

_「我會嘗試比較其中的值」_你想要什麼確定? – guest271314

+1

@ guest271314比較查看所有屬性的值是否相等。我現在看到,JavaScript等於僅基於等式進行評估,並且$(this)每次調用時都會返回一個新的引用。 因此,寶寶,我不認爲這是重複的。我不知道$(this)每次都返回一個新的參考對象到「this」,這在你的鏈接問題中沒有解決。 – NicholasFolk

回答

6

使用$()回報的jQuery的一個實例。所以,你用thisthis的另一個實例創建一個實例,你有兩個單獨的實例。儘管它們與this有相同的參考,但實例並不相同,並且這些實例正在進行比較。


它可以幫助有視覺例子,可能會使事情更加清楚一點。 jQuery像一個類一樣運行。因此,讓我們用一個非常簡單的例子其中,例如起見,功能$()不存在:

class jQuery { 
    constructor(element) { 
     this.element = element; 
    } 
} 

var obj1 = new jQuery(this); 
var obj2 = new jQuery(this); 

console.log(obj1 === obj2); // false 

這兩項都使用完全相同的參數(this)創建一個新的「jQuery的」對象。但是,obj1再一次與obj2完全不同。他們在記憶中都有自己獨特的地方。

+3

+1 - 此外,如果您想比較這些值,請使用'this === this'。爲了澄清,當你用'$()'包裝它時,返回一個[jQuery對象](https://learn.jquery.com/using-jquery-core/jquery-object/)的實例(你可能想要在你的回答中澄清)。 –

+0

標記爲答案,因爲它解決了問題的根源,這本質上是「什麼是$(...)返回(或在引擎蓋下)?」。 – NicholasFolk

+1

@NicholasFolk,真棒。由於JoshCrozier的評論,我也繼續前進,並增加了一個更加明顯的例子。 – KevBot

相關問題