Sorunun ilk bölümü:
Null neden JavaScript'te bir nesne olarak kabul edilir?
Şimdi düzeltemedikleri bir JavaScript tasarım hatasıdır. Nesne değil, boş olmalı ya da hiç olmamalıdır. Gerçek nesneleri tespit ederken ekstra bir kontrol gerektirir (bazen unutulur) ve hata kaynağıdır.
Sorunun ikinci kısmı:
İle
if (object == null)
Do something
aynı kontrol ediyor
if (!object)
Do something
İki kontrol aşağıdakiler dışında her zaman yanlıştır:
nesne tanımsız veya null: her ikisi de true.
nesne ilkel ve 0 ""
veya yanlış: ilk önce yanlış, ikinci doğru.
Nesne ilkel değil, ama gerçek bir nesne gibi olursa new Number(0)
, new String("")
ya new Boolean(false)
sonra her iki kontroller yanlış.
Eğer 'nesne' gerçek bir Nesne olarak yorumlanırsa, her iki kontrol de hep aynıdır. İlkellere izin verilirse, kontroller 0 ""
, ve yanlış için farklıdır .
Böyle durumlarda object==null
, net olmayan sonuçlar bir hata kaynağı olabilir. Kullanımı ==
hiç önerilmez, ===
bunun yerine kullanın.
Sorunun üçüncü kısmı:
Ve ayrıca:
null ve undefined arasındaki fark nedir?
JavaScript'te bir fark, null türünün nesne ve undefined öğesinin undefined türünde olmasıdır.
JavaScript'te null==undefined
doğrudur ve tür yoksayılırsa eşit kabul edilir. Buna neden karar verdiler, ama 0 ""
ve yanlış eşit değil, bilmiyorum. Keyfi bir görüş gibi görünüyor.
JavaScript'te, null===undefined
türün aynı olması gerektiğinden doğru değildir ===
.
Gerçekte, null ve undefined aynıdır, çünkü her ikisi de yokluğu temsil eder. Öyleyse 0 yapın, ""
bu nedenle de boş kapları []
ve {}
. Aynı şeylerin pek çok türü böcekler için bir reçetedir. Bir tür veya hiçbiri daha iyi değildir. Mümkün olduğunca az kullanmaya çalışıyordum.
'yanlış', 'doğru' ve '!' örneğin basitleştirilebilecek başka bir solucan torbası if(!x)
veif(x)
tek başına yeterli, doğru ve yanlışa ihtiyacınız yok.
Bildirilen bir var x
değer verilmemişse, bildirilen tür undefined'dir, ancak x hiç bildirilmediği gibi olmalıdır. Başka bir hata kaynağı boş bir şey kapsayıcısıdır. Bu yüzden, birlikte ilan etmek ve tanımlamak en iyisidir var x=1
.
İnsanlar, tüm bu çeşitli şeyleri anlamaya çalışan çevrelerde dolaşıyorlar, ancak hepsi karmaşık farklı kıyafetlerde aynı şey. Gerçek şu ki
undefined===undeclared===null===0===""===[]==={}===nothing
Ve belki de herkes istisnalar atmalıdır.