SORU
10 ŞUBAT 2010, ÇARŞAMBA


Tanımsız bir değişken ayarı

JavaScript hakkında biraz kafam karıştı: undefined null değerleri.

if (!testvar) tam olarak ne iş yapar? Tanımsız için test yapıyor ve boş veya tanımsız?

Bir zamanlar bir değişken tanımlanmış açık bir tanımsız (dolayısıyla değişken silme) geri alabilir miyim?

Parametre olarak tanımlanmamış geçebilir miyim? e.g:

function test(var1, var2, var3) {
}

test("value1", undefined, "value2")

CEVAP
10 ŞUBAT 2010, ÇARŞAMBA


Biraz Javascript tanımsız & null hakkında kafam karıştı.

null konusunda kafanız karışmasın. Genellikle mantıklı ve benzer diğer betik dilleri için davranır' out-of-band kavramı‘’, ‘’ veya ‘Yok’ nesneler. nil null

undefined, Diğer taraftan, JavaScript garip bir cilvesi. Bant dışı değerler, bir ikinci benzer ama aslında farklı gösteren tek bir nesne null. Bu kadar gelir:

  1. function deyiminde değişkenleri listeler daha az sayıda bağımsız değişken ile bir işlev çağrısı unpassed argümanlar 13* *için ayarlanır. Örneğin. bunun için test edebilirsiniz:

    function dosomething(arg1, arg2) {
        if (arg2===undefined)
        arg2= DEFAULT_VALUE_FOR_ARG2;
        ...
    }
    

    Bu yöntem ile dosomething(1) dosomething(1, undefined); arg2 arasındaki fark ikisi de aynı değer olacak söyleyemezsin. Eğer farkı söylemek gerekirse bu genellikle çok okunabilir değil gibi 18 ** ama isteğe bağlı bağımsız değişkenler yaptığına bak.

  2. Bir fonksiyon undefined döner return value;, hiçbir zaman. Genellikle böyle bir dönüş sonucu kullanmaya gerek yok.

  3. Blok var a ifadesi olan bir değişkeni bildirir ancak henüz bir değer atanmış değil, undefined. Yine, gerçekten hiç güvenmek gerekmez.

  4. typeof ürkütücü operatörü işleneni yok basit bir değişken olduğunda 'undefined' normalde eğer bunu ifade etmeye çalışırsanız olacağı gibi bir hata atmak yerine döner. (Ayrıca basit bir değişkeni parantez içinde sarılmış, ama verebilirsinizdeğil-var olmayan bir değişken içeren tam bir ifade.) Bunun için çok kullanmak değil.

  5. Bu tartışmalı. Sen var olmayan bir nesnenin bir özelliğine eriştiğinizde, hemen diğer her dil gibi bir hata alamadım. Bunun yerine undefined bir nesne olsun. (Ve sonra kullanmaya çalıştığınızda undefined nesne daha sonra komut giderim yanlış bir garip yol bu çok daha zor izlemek daha JavaScript vardı sadece atılan bir hata hemen.)

    Bu genellikle özellikleri varlığı için kontrol etmek için kullanılır:

    if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
       ...do something...
    

    Başka bir değer gibi undefined atayabilirsiniz, ancak:

    o.prop= undefined;
    

    aslında özelliği var güvenilir olup olmadığını tespit değil. Daha iyi JavaScript Netscape orijinal versiyonu değildi, ama şimdi her yerde mevcut olan in operatör, kullanmak için:

    if ('prop' in o)
        ...
    

Özet olarak, undefined herkesin kafasını karıştıran JavaScript özgü bir karmaşa. JS daha şık başka bir mekanizma olduğu isteğe bağlı fonksiyon argümanları dışında, undefined kaçınılmalıdır. Gereken şey bir anda olup parçanın dil; null olurdu çalıştı gayet iyi (2) ve (3) ve (4) . Daha eklenmemiş bir özellik sadece var olduğu için başlangıçta JavaScript vardı istisnasız.

if (!testvar) tam olarak ne iş yapar? Tanımsız için test yapıyor ve boş veya tanımsız?

Bir ‘test kontrolleriundefined, null, , * 0*39 ve boş dizeler. karşı truthiness böyle Ama bu durumda, Evet, ile ilgili *gerçekten. IMO, bu konuda daha açık ve if (testvar!==undefined) diyebilirim.

bir değişken geri tanımsız (dolayısıyla değişken silme) temizleyebilir miyim tanımlandıktan sonra.

Kesinlikle undefined atayabilirsiniz, ama bu değişken silmez. delete object.property tek operatör çok şeyler kaldırır.

delete gerçekten gibi değişkenler yerine özellikleri içindir. Tarayıcı ama iyi bir fikir değil delete variable, düz kurtulmak izin verir ve ECMA Beşinci baskı strict modda çalışmaz. Eğer çöp toplama olabilir yani bir şey için bir başvuru kadar özgür olmak istiyorsanız, variable= null demek daha normal olurdu.

parametre olarak tanımlanmamış geçebilir miyim?

Evet.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • eisleyhead

    eisleyhead

    11 Ocak 2006
  • KendrickLamarVEVO

    KendrickLama

    9 ŞUBAT 2011