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
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.
Nasıl bir JavaScript nesne, belirli bi...
Nasıl bir dizi JavaScript tek olup olm...
Nasıl değişken olup olmadığını belirle...
Nasıl pi benim hesaplama doğru olup ol...
Nasıl JavaScript devre dışı olup olmad...