Yanılmıyorsam üç gündür bu projemin bir bug fixe ihtiyacı vardı ve nihayet bugün sorunun kaynağına ulaştım.
Javascript’te aynı özelliklere sahip iki obje asla birbirine eşit olamazmış.
“Two distinct objects can have same properties, but they are never equal. Only comparing the same object with itself returns true.”
Mesela:
Bu olayı biraz araştırdım ve bu durumu açıklayan cevaplar genellikle aynı özelliklere sahip iki objenin asla birbirine eşit olamayacağından, ancak obje kendisiyle karşılaştırılırsa true döneceğinden; objelerin bellekte farklı yerleri olduğundan vs. bahsetmiş.
Ben ise bu olayın sebebini ve teorik yönünü merak ediyorum.
Niye böyle bir şey var ?
Yukarıdaki kodların hepsi true döndürse daha mantıklı olmaz mıydı, bunun arkasındaki mantık nedir ?
Neden Python’daki gibi olamazdı ? ([1, 2, 3] == [1, 2, 3] # true)
Kısacası, neden ?
Cunku Javascript aceleyle ve cok basit problemleri cozmek icin tasarlandi.
Basit bir == kontrolu neden potansiyel olarak uzun sureler alacak, kb’larca hafiza kullanacak bir is yapsin ki?
Hem bunu istiyorsan fonksiyonunu yazabilirsin.
Bu arada objelerin ozellikleri disinda ownProperty’leri filan var, prototipleri var. Buradaki her durum icin mantikli bir cevap bulabiliyor musun? Aceleyle bulmak ister miydin?
Hocam konu ile alakası yok ama ek olarak şunu sorabilirmiyim ?
Ruby’de de objelerin id'leri birbirine eşit değilken, Symbol denilen yapıların id'leri nasıl birbirine eşit olabiliyor?
“Neden sembollerin id’leri esit oluyor” diye sorsaydin interning var herhalde derdim, semboller kod icinde constant gibi (hatta daha kullanisli bir sekilde) kullanildiklari icin objelerinin bir onemi yok, switch veya == gibi kontrollerde birbirlerine esit cikmalarinin cok onemi var derdim.
aynı kaynakten geliyorsa senin yaptığın gibi şeyler olmaz, ha farklı farklı yerlerden buluyorsan bu objeleri o zaman farklı olaiblir o zaman oturup teker teker bakarsın.