SORU
4 Ocak 2009, Pazar


Nasıl iyi bir argüman JavaScript işlevi gönderilirse olmadığını belirlemek için

Şimdi, Eğer bir değişkeni bir JavaScript işlevi geçirildi belirlemek için 2 yöntem gördüm. Eğer bir yöntem diğerinden daha iyi veya sadece kötü kullanım için olup olmadığını merak ediyorum?

 function Test(argument1, argument2) {
      if (Test.arguments.length == 1) argument2 = 'blah';

      alert(argument2);
 }

 Test('test');

Ya

 function Test(argument1, argument2) {
      argument2 = argument2 || 'blah';

      alert(argument2);
 }

 Test('test');

Söyleyebileceğim kadarıyla, ikisi de aynı şey neden, ama sadece önce ilk üretim kullandım ben.

Tom tarafından belirtildiği gibi başka bir Seçenek:

function Test(argument1, argument2) {
    if(argument2 === null) {
        argument2 = 'blah';
    }

    alert(argument2);
}

Juan yorum başına, Tom öneri değiştirmek için daha iyi olurdu:

function Test(argument1, argument2) {
    if(argument2 === undefined) {
        argument2 = 'blah';
    }

    alert(argument2);
}

CEVAP
4 Ocak 2009, Pazar


Eğer bir değişken bir işleve olup olmadığını kontrol etmek için birkaç farklı yolu vardır. Ek olarak iki bahsetmiştin senin (orijinal) soru - kontrol arguments.length kullanarak || operatör sağlamak için varsayılan değerler - bir de açıkça onay değişkenler için undefined ) argument2 === undefined typeof argument2 === 'undefined' eğer bir paranoyak (bkz: yorum).

Kullanarak || operatör de dahil olmak üzere standart bir uygulama - tüm havalı çocuklar yap - ama dikkatli olun: varsayılan değer olacak tetikleyen bağımsız değerlendirir false demek ki, olabilir aslında undefined, null, false, 0, '' (ya da başka bir şey için Boolean(...) döner false).

Soru, hepsi biraz farklı sonuçlar olarak kullanma zamanı.

Kontrol arguments.length sergiler '' davranış, ama eğer birden fazla isteğe bağlı bağımsız değişken varsa oraya uygun olmayabilir. en doğru

Test için undefined bir sonraki 'en iyi' - 'başarısız' eğer işlevi olduğunu açıkça adında bir undefined değer, tüm olasılık vardır tedavi edilmelidir aynı şekilde kullanılmazsa argüman.

|| operatör kullanıyorsanız geçerli bir argüman belirtilmezse varsayılan değeri kullanım tetikleyebilir. Öte yandan, kendi davranışlarını istenen aslında olabilir.

Özetlemek gerekirse:Eğer ne yaptığınızı biliyorsanız kullanın!

Benim görüşüme göre, || kullanarak aynı zamanda birden fazla isteğe bağlı bağımsız değişken var ve bir nesne adlandırılmış parametreleri için geçici bir çözüm olarak değişmez geçmek istemiyor eğer gitmek için bir yoldur.

Varsayılan değerler arguments.length kullanarak sağlamak için bir başka iyi yolu bir switch deyimi etiketleri ile düşme ile mümkündür:

function test(requiredArg, optionalArg1, optionalArg2, optionalArg3) {
    switch(arguments.length) {
        case 1: optionalArg1 = 'default1';
        case 2: optionalArg2 = 'default2';
        case 3: optionalArg3 = 'default3';
        case 4: break;
        default: throw new Error('illegal argument count')
    }
    // do stuff
}

Bu programcı niyeti (görsel olarak) belli olmayan yan etkileri vardır ve kullanımları 'sihirli sayı'; bu nedenle muhtemelen hata eğilimli.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • FailArmy U

    FailArmy U

    29 AĞUSTOS 2009
  • Lancome USA

    Lancome USA

    30 HAZİRAN 2009