Sitemap

The story of NULL

3 min readApr 1, 2022

undefined, JavaScriptde kesin yokluğu söyleyen bir primitive valuedir. undefined, 1998 de JavaScript 1.3 e kadar direct olarak erişilebilir değildi. Buda bize null’un o zaman, bir değerin olmadığını açıkça söyleyen bir değer olarak kullanıldığı için tasarlandığını söyler. Initialize olmamış değerler otomatik olarak undefined değerini alırlar. undefined ise ECMAScript spesificationslarında tür tiplerinden birisidir.

null objectlerde kasıtlı istenilen, bırakılan yokluğu ifade eden primitive valuedir. null da ECMAScript spesificationslarında tür tiplerinden birisidir.

Javascript’te null Java ile birlikte çalışabilirliği sağlanmak amacıyla tasarlandı. Hem görünüm perspektifinden, hemde programlama perspektifinden ötürü. Hem Brendan Eich hemde diğer geliştiriciler, 2 absence yani yokluk valuesinin olmasından hoşnut olmadıklarını ifade ettiler fakat 1995 de yinede Eich’e Javascripti Javaya benzetme emri verdiler.

Eğer yönetimden “Java gibi yap” emrini almasaydım ve daha fazla zamanım olsaydı (Bu iki sebebi çözmek zordu), “Herşey bir object” mantığına benze bir approach tercih ederdim. Yani Boolean, Number, String sarmalayıcıları yok, undefined null yok gibi. Ahh.
Brendan Eich:

Javanın strongly-typed yapısından ötürü null sadece typed variableslara yani type’ı belirli variablelara assign edilebiliyordu. Ve Eich, javadaki null konseptine uyum sağlaması amacıyla null için object prototype chaninin en üstünde özel bir konum seçti. (i.e.(yani) the top of the reference types). Ve null type ını, “object-type primitives” ın bir parçası oalrak dahil etti. Bu yüzden typeof null, ‘null’ değil ‘object’ döner.

Typeof operatörü, 19 Agustos 1996’da JavaScript 1.1 releasesınden kısa bir süre sonra eklendi.

typeof null === ‘object’

From the V8 blog:

typeof null, null un kendisinin bir type olmasına rağmen null değil object return eder. Nedenini anlamak için Javascriptteki typesların 2 gruba ayrıldığını düşünün.

1. objects (i.e. the Object type)

2. primitives (i.e. any non-object value)

Bu yüzden null “no object value” anlamındayken, undefined “no value” anlamındadır. Daha iyi anlamak için aşağıda ki grafiğe bakalım.

Bu düşünce çizgisini takip ederek, Brendan Eich JavaScript’i, Java ruhu içinde, sağ taraftaki tüm değerler, yani tüm objectler ve null değerler için typeof return ‘object’ yapmak üzere tasarladı. İşte bu niye typeof null === ‘object’ niye null değilin sebebidir.

Bu yüzden Eich, primitive typesların hiyeraşisini Java ile uyumluluk sağlayabilmesi için tasarladı. Buda onu null için “object-type primitives” larda pozisyonlamasına öncülük etti. Bunu yansıtmak içinde, nulldan sonra Javascripte typeof eklendiğinde, typeof null un “object” dönmesini seçti.

Javascript geliştiricileri arasında typeof null === “object” süprizi, hem null hemde undefined a sahip weakly-typed language (JavaScript) ile sadece null a sahip bir başka strongly-typed language (Java) arasında bir impedance mismatch (or abstraction leak) olarak ifade edildi. Ki Javada null, bir primitive type a değil, kesinlikle bir reference type ına atıfta bulunmak için tasarlanmıştır.

Bunların hepsi mantıklı, açıklanabilir ve savunulabilir. typeof null === "object" bir bug değil fakat Java ile birlikte çalışabilir olmasının ikinci dereceden bir etkisi.

undefinedın bir valuenin yokluk durumunu göstermesi ve nullın özellikle bir objectin yokluk durumunu göstermesi dahil bir dizi geriye dönük akla yatkın hale getirme conventionsı ortaya çıktı.

Brendan Eich in bu konuyla alakalı ilgili konuşmasını görsel olarak aşağıya bırakıyorum.

--

--

Mucahid Yazar
Mucahid Yazar

Written by Mucahid Yazar

Frontend Developer @smartgift in Istanbul

No responses yet