Takazudo Clipping*

  • 文字サイズ小
  • 文字サイズ中
  • 文字サイズ大

$("body")==$("body") がfalseになるのはなぜなんだー

前エントリがすごいブックマークされている…
時間を見て続きを書きますのでよろしくお願いします。

jQueryで、

$("body")==$("body") // false

のような感じで、HTMLの要素をラップしたものを比較しようとすると、falseが出るのはなぜなんだろう。ループさせて保存してたやつと比較するときにアラ?これ一致しないの?だって同じでしょ?と思ってのだけれど、なんでダメなのか分かった。

によると、”Two objects are strictly equal if they refer to the same Object.”とのことで、オブジェクト同士を比較するときは、同じものを参照していないとtrueにならないとのこと。最初の $("body") と、2番目の $("body") は、内容的には同じなのだけど、後から作られたほうは最初に作ったjQueryオブジェクトとは別のオブジェクトなので、ダメってことだった。

var hoge = {a:1,b:2};
var hage = hoge;
hoge==hage // true

だけど、

var hoge = {a:1,b:2};
var hage = {a:1,b:2};
hoge==hage // false

になるってことみたい。

なんで

$("body")==$("body") // false

がtrueになるはずでしょ?と思ったかというと、たぶん、

document.body == document.body // true

がtrueになるから、そう勘違いしたのだと思った。
jQueryオブジェクトは、HTMLの要素みたいに扱えるけど、実際はHTMLの要素じゃなくてオブジェクトなんですよということだった。なので、

$("body").get(0)==$("body").get(0) //true

のようにちゃんとHTMLの要素同士で比較してやれば、それはおんなじ物を指しているのでOKってことなのだなぁ。

  • コメントを書く
: 
: 
: 
TrackBack URL (この記事についてトラックバックしたい時は以下のURLを指定してください)
http://gyauza.egoism.jp/cgi/mt/mt-tb.cgi/2161



2007 © Takazduo Some Rights Reserved.