JavaScript'te tam olarak ne anlama geliyor? Neden orada? Ne işe yarar? Nasıl faydalı olabilir?


11

JavaScript'te tanımsız adında bir şeyimiz var . Bir şey söyledim, çünkü bunun temel bir sınıf mı, yerleşik bir değişken mi yoksa bir anahtar kelime mi yoksa başka bir şey mi olduğunu gerçekten bilmiyorum. Sadece orada olduğunu biliyorum.

Eylem halinde görmek için şunları yazabilirsiniz:

undefined;
typeof undefined;

Birisi bana bu şeyin neden JavaScript'e eklendiğini açıklayabilir mi? Biz nullböylece gibi bir şey olmamalı, bu dilde değeri null. Diğer dillerde, bir mülkün veya değişkenin değerini bilmediğimizde, onu null olarak ayarladık. Burada aynı şeyi yapabiliriz.

Bu şeyi JavaScript'te nasıl kullanabiliriz ?



Bu, burada müzakere tartışıldı stackoverflow.com/questions/6999291/…
Paul

Yanıtlar:


13

Undefined hakkında anlamanız gereken İKİ şey var ...

  • tipi undefined yalnızca olabilir bir değer .
  • değişken undefined

Şimdi aşağıdakileri çok dikkatli okuyun ...

  • Çok fazla tip değeri vardır number(10, 10.01, 1e1). Ama sadece olabilir bir değer Çeşidi undefinedve bu değer değişken olarak depolanır undefined. Bu değer, örneğin, sayı değerleri - hayır değişmez gösterimi olan 1, 100, 1e-1tip numarası her değişmezdir ancak değişken saklanan değer undefinedbir hazır forma sahiptir.

  • undefinedJavaScript'in undefinedgenel kapsamdaki türün değerini bildirdiği ve atadığı normal bir değişkendir . Böylece aşağıdakileri yapabilirsiniz ...

  tanımsız tip; // "Tanımsız"

  tanımsız = 100;
  tanımsız tip; // "numara"

  undefined = boşluk 0;
  tanımsız tip; // "Tanımsız"

  window.undefined === tanımsız; // doğru
  window.undefined === geçersiz 0; // doğru
  
  • değişkeni kullanmak istemiyorsanız , tek amacı tür değerini döndürmek olan ifadenin undefinedtür değerini üretebilirsiniz .undefinedvoid 0undefined

... lütfen bana bu şeyin neden JavaScript'e eklendiğini açıklayabilir mi?

HAYIR. Tıpkı hiç kimsenin kayıt dışı değişkenlerin neden yerel yerine küresel alana gittiğini açıklayamaması gibi. Sadece varlığı için gerekçeler bulmaya çalışmak yerine akıllıca kullanmak için kendinizi eğitmeniz gerekiyor .

... null değere sahibiz ...

Bir nullşeyler yapabilirse de undefined, objectsskalerden ziyade aşağı yukarı ilişkilidir . Aslında, JavaScript nullkendini bir nesne olarak görür - typeof null"nesne" döndürür.

Benim düşünceme göre, sonuçta mutlak amaçlarını gerekçelendirmeye ÇALIŞMAYIN undefinedve null- kodunuzda akıllıca kullanın, böylece kodunuz okunabilir, bakımı yapılabilir ve tekrar kullanılabilir.


2
İyi açıklama @greengit. the bottom line is to NOT try to reason the absolute purposes of undefined and null, JavaScript'in mantıklı bir dil olmaktan çok daha küçük olduğu ve yeni bir dünyayı denemek gibi buna alışmamız gerekiyor gibi görünüyor.
Saeed Neamati

1
msgstr "tek amacı bir tür değer döndürmek undefined". Aslında voidbir ifadeyi değerlendirir, dönüş değerini dikkate almaz ve değeri döndürür undefined. Farklılıklar gelince. undefinedJS motoru tarafından bu şeyin değeri olmadığını söylemek için kullanılır. SİZİN bu şeyin bir değeri olmadığını söylemek nulliçin kullanılır . Bir yoktur net bir ayrım.
Raynos

1
undefined = 100; typeof undefined;benim için "tanımsız" döndürür, eğer null değerine atamaya çalışırsanız bir hata alırsınız. Sadece gelecekteki okuyucular için bunu açıklığa kavuşturmak istedim.
Josh Rumbut

6

Maalesef eski bir soru ama ikisini tanımsız ve boş basittir ihtiyaç nedeni yanıtlayan için: kesinlikle bir prototip tabanlı ördek yazarak dilinde olmalıdır "Bu nesne X için bir değer tanımlamıyor" ve ayırt "Bu nesne X diyor hiçbir şey / null / boş".

Bu yetenek olmadan prototip zincirinde yürümenin bir yolu yoktur ve bu nedenle miras işe yaramaz; obj.prototype.someProp'a bakabilmeniz ve bir değer bulana kadar zinciri yukarı doğru görebilmeniz için obj.someProp öğesinin tanımsız olduğunu belirleyebilmeniz gerekir. Obj.someProp null değerini döndürürse, gerçekten null olup olmadığını veya "prototipime bak" anlamına gelip gelmediğini bilmenin bir yolu olmazdı. Bunun tek yolu, prototip zincirleri ile karışıklık ve JS kara büyü çeşitli bitleri yapmak yeteneğini kıran perde arkasına kludgy sihir enjekte etmektir.

Javascript'in çoğu gibi, undefined ve null fikri ilk başta sakat ve aptal, daha sonra kesinlikle daha parlak görünüyor (sonra geri sakat ve aptal ama makul bir açıklama ile).

Var olmayan bir özelliğe erişirseniz C # gibi bir dil derlenmez ve diğer dinamik diller, var olmayan bir özelliğe dokunduğunuzda çalışma zamanında istisnalar atar, yani bunları sınamak için özel yapılar kullanmanız gerekir. Artı sınıfları, bir nesne başlatıldığında miras zincirini ve sahip olduğu tüm özellikleri zaten biliyorsunuzdur - JS'de bir prototipi 15 adım yukarı değiştirebilirim ve bu değişiklikler mevcut nesnelerde görünecektir.


3

undefinedTanımlanmamış değere ayarlanmış bir global değişken var . Kötü insanlar başka bir şeye ayarlayabilir, bu yüzden muhtemelen güvenmemek en iyisidir.

  • Undefined değeri, bir değer döndürmeyen bir işlevin dönüş değeridir.
  • Undefined değeri, atanmamış bir değişkenin değeridir.
  • Undefined değeri, geçirilmemiş bir parametrenin değeridir.
  • Undefined değeri, atanmamış bir özelliğin değeridir.
  • 'undefined', bildirilmemiş bir değişkenin türüdür. ( typeof undeclaredVariable == 'undefined'. yetersiz bir değişkenin değerini okumaya çalıştığınızda size atılacaksınız ReferenceError.)

nullkurnazca kırıldı, çünkü typeof null == 'object'. Neden yaşadığımızı undefinedve nullmuhtemelen bazı tarihsel kazaları bilmiyorum .


2

Eh, undefinedbir şeyi değerlendirerek elde edilen bir gözcü değerdir tanımlanmadı aksine nulltam temsil etmek tanımlanan değer olan şey .

var o = { };
> undefined
o
> Object {}
o.foo
> undefined
function f() {}
> undefined
function r() { return null; }
> undefined
f()
> undefined
r()
> null

Örneğin, bir dönüş değeri tanımlamayan bir işlevin dönüş değeri tanımsızdır. Bir nesne üzerinde tanımlı olmayan bir özelliğin değeri tanımlanmamış. İfadenin olmayan bir ifadenin dönüş değeri tanımlanmamıştır (ancak bunun konsolda dışında gerçekleştiğini görmeyeceksiniz).
Lütfen not, o olabilir bir işlevi, açıkça gelirler yaratmak undefinedve yapabilirsiniz açıkça değerine sahip bir özellik tanımlamak undefinedsonunda geçerli bir değer olduğundan, bir nesne üzerinde. Açık bir şekilde iletişim kurmak için bir şeyin tanımlanmadığını yaparsınız .

Sen ilişkisi düşünebildiğim undefinedve nullaralarında bu kadar NaNve 0.


Bunu demek "bir dönüş değeri tanımlamıyor bir işlevin dönüş değeri, tanımlanmamış" undefinedolduğunu void?
Saeed Neamati

@Saeed: Pek değil. voidJavaScript'te, herhangi bir argüman alan ve değeri döndüren tekli bir operatördür . undefined
back2dos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.