Javascript undefined & null konusunda biraz kafam karıştı.
Kafanız karışmasın null
. Genellikle mantıklıdır ve diğer komut dosyası dillerinin bant dışı 'null', 'nil' veya 'None' nesnelerine benzer şekilde davranır.
undefined
, diğer taraftan, tuhaf bir JavaScript tuhaflık. Bant dışı değerleri temsil eden tek bir nesnedir, aslında ikinci bir benzer ama farklıdır null
. Ortaya çıkıyor:
function
İfade listelerindeki bağımsız değişkenler listesinden daha az bağımsız değişken içeren bir işlevi çağırdığınızda , atlanmamış bağımsız değişkenler olarak ayarlanır undefined
. Bunu örneğin:
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
Bu yöntem ile dosomething(1)
ve arasındaki farkı söyleyemezsiniz dosomething(1, undefined)
; arg2
her ikisinde de aynı değer olacaktır. Farkı anlamanız gerekiyorsa arguments.length
, ancak bunun gibi isteğe bağlı argümanlar yapmak genellikle çok okunabilir değildir.
Bir işlevin hayır değeri varsa return value;
, geri döner undefined
. Genellikle böyle bir geri dönüş sonucunun kullanılmasına gerek yoktur.
Bir değişkeni var a
bir blokta ifade alarak, ancak henüz bir değer atamadığınızda bildirirseniz, değişkendir undefined
. Yine, buna gerçekten güvenmenize gerek yok.
Ürkütücü typeof
operatör 'undefined'
, başvurmaya çalıştığınızda normalde olduğu gibi bir hata atmak yerine, işleneni mevcut olmayan basit bir değişken olduğunda geri döner . (Ayrıca, parantez içine alınmış basit bir değişken de verebilirsiniz, ancak var olmayan bir değişkeni içeren tam bir ifade veremezsiniz .) Bunun için de fazla bir kullanım yok.
Bu tartışmalı olan. Var olmayan bir nesnenin özelliğine eriştiğinizde, diğer tüm dillerde olduğu gibi hemen bir hata almazsınız. Bunun yerine bir undefined
nesne alırsınız . (Daha sonra bu undefined
nesneyi daha sonra komut dosyasında kullanmaya çalıştığınızda, JavaScript'in hemen bir hata atmış olmasından çok daha zor olan garip bir şekilde yanlış gidecektir.)
Bu genellikle özelliklerin varlığını kontrol etmek için kullanılır:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
Ancak, undefined
başka bir değer gibi atayabileceğiniz için :
o.prop= undefined;
aslında orada özelliğin güvenilir olup olmadığını algılamaz. in
JavaScript'in orijinal Netscape sürümünde olmayan ancak şu anda her yerde kullanılabilen operatörü kullanmak daha iyidir:
if ('prop' in o)
...
Özetle, undefined
herkesi şaşırtan JavaScript'e özgü bir karmaşa. JS'nin daha zarif bir mekanizmaya sahip olmadığı isteğe bağlı işlev argümanlarından ayrı undefined
olarak kaçınılmalıdır. Asla dilin bir parçası olmamalıydı; null
(2) ve (3) için iyi çalışırdı ve (4) başlangıçta JavaScript'in istisnaları olmadığı için var olan bir yanlış özelliktir.
if (!testvar)
aslında ne yapar ? Tanımsız ve boş mu yoksa sadece tanımsız mı test ediyor?
Böyle bir 'truthiness' karşı test eder false
, undefined
, null
, 0
, NaN
ve boş dizeleri. Ancak bu durumda, evet, gerçekten undefined
endişeleniyor. IMO, bu konuda daha açık olmalı ve diyelim if (testvar!==undefined)
.
bir değişken tanımlandıktan sonra onu tanımsız olarak temizleyebilir miyim (bu nedenle değişkeni silerim).
Kesinlikle undefined
ona atayabilirsiniz , ancak bu değişkeni silmez. Sadece delete object.property
operatör işleri gerçekten kaldırır.
delete
gerçekten değişkenler yerine özellikler içindir. Tarayıcılar düz bir şekilde kurtulmanıza izin verecektir delete variable
, ancak bu iyi bir fikir değildir ve ECMAScript Fifth Edition'ın katı modunda çalışmaz. Çöp toplanabilmesi için bir şeye referans vermek isterseniz, söylemek daha olağan olurdu variable= null
.
tanımsız olarak parametre olarak iletebilir miyim?
Evet.