前エントリがすごいブックマークされている…
時間を見て続きを書きますのでよろしくお願いします。
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ってことなのだなぁ。
This article is about... JavaScript , jQuery