: Eğer JavaScript bunu yapmak nasılJS: fonksiyonlar argümanlar varsayılan değerler fonksiyonun bağımsız değişkenler için varsayılan değerler ayarlayabilirsiniz Bazı dillerde
function Foo(arg1 = 50, arg2 = 'default') {
//...
}
?
: Eğer JavaScript bunu yapmak nasılJS: fonksiyonlar argümanlar varsayılan değerler fonksiyonun bağımsız değişkenler için varsayılan değerler ayarlayabilirsiniz Bazı dillerde
function Foo(arg1 = 50, arg2 = 'default') {
//...
}
?
JavaScript'te, ayarlanmamış olan herhangi bir şey undefined
değeri verilir. Bu, bir işlev için varsayılan değerleri ayarlamak isterseniz bu değerler tanımlanmış değilse, ilk satır görmek için bir onay olması gerektiği anlamına gelir:
function Foo(arg1, arg2) {
if (typeof(arg1) === "undefined") { arg1 = 50; }
if (typeof(arg2) === "undefined") { arg2 = "default"; }
}
Kısa bir kesim biraz alabilir eğer bu değerler ne olacağını kabaca biliyorum: bu argümanlar falsy ise
function Foo(arg1, arg2) {
arg1 = arg1 || 50;
arg2 = arg2 || "default";
}
Ancak, bunlar değiştirilmelidir edeceğiz. bunu
Sen fonksiyonu vücut yapmak gerekir:
function Foo(arg1 ,arg2) {
if(typeof arg1 === 'undefined')
arg1 = 50;
if(typeof arg2 === 'undefined')
arg2 = 'default';
//...
}
undefined
veya null
için onları test için başka bir yol şu şekildedir: Bazı insanlar çünkü sevmiyorum
function Foo(arg1 ,arg2) {
if(arg1 == undefined)
arg1 = 50;
if(arg2 == undefined)
arg2 = 'default';
//...
}
Sadece global bir özellik olduğu için undefined
değerini geçersiz kılmak mümkündür. Geçersiz kılmadığı sürece, bu iyi çalışır. Parametreler null
veya undefined
ise, bunlar bir varsayılana ayarlanır.
kullanmayı seçtiyseniz, bu jQuery olarak (yerine typeof(arg1) === undefined
ait == null
çek tercih arg1 bu oran 50 olarak değiştirildi olacak boş bir dize, null
, undefined
, false
veya 0
ise, bu yüzden dikkatli olun demektir kütüphane dahili olarak yapar: http://docs.jquery.com/JQuery_Core_Style_Guidelines#JSLint). Sadece daha özlü olmakla kalmaz, aynı zamanda hem null hem de undefined işlemlerini gerçekleştirir, böylece istemci kodu null
'dan geçer ve varsayılanı uygular.
Ayrıca işlevi varsayılan değerleri sağlayan başka bir işlevde de sarmak mümkündür. Prototypejs kitaplığı, argumentNames()
'u sağlayan bir işleve sahiptir (veya prototip kullanmak istemiyorsanız, yalnızca uygulamayı ödünç alabilirsiniz; bu yalnızca işlevin toString()
sonucuna karşılık gelen bir normal ifadedir). Böyle bir şey olmazdı
var Foo = defaults(Foo, { arg1: 50, arg2: 'default' });
function Foo(arg1, arg2) {
//...
}
Ve defaults()
uygulanmasını:
Yani böyle bir şey yapabileceğini
Tabiifunction defaults(fn, def) {
return function() {
var arg_names = fn.argumentNames();
var nArgs = args.length;
for (var nArg = 0; nArg < nArgs; ++nArg) {
if (arguments[nArg] == null && arg_names[nArg] in def)
arguments[nArg] = def[arg_names[nArg]];
}
fn.apply(this, arguments);
}
}
, o denenmemiş kod ve yazıldığı şekilde, bu kadar Prototip kitaplığı gerektirir.Ancak tüm bu, işlevi içinde == null
yaklaşım Javascript daha doğal geliyor, (siz gezinmek için başka fonksiyon katmanı yok) ayıklama daha kolaydır ve bunu daha kolay okumak için bulmak:
function Foo(arg1, arg2) {
if (arg1 == null) arg1 = 50;
if (arg2 == null) arg2 = 'default';
}
Yanıt için teşekkürler. Bu arada jQuery yönergeleri bloklarda kullanılmak üzere parantez gerektirir. Ben de bunu tercih ederim. Sanırım arg1 == null && arg1 = 50' gibi bir şey doğru olurdu (JS'de operatörlerin önceliğinden emin değilim)? – SaltLake
ES2015 (ES6) itibariyle varsayılan parametreleri şöyle ayarlanabilir:
function multiply (a, b = 2) {
return a * b;
}
multiply(5); // 10
[JavaScript işlevi için bir varsayılan parametre değeri ayarlayın] olası yinelenen (http://stackoverflow.com/questions/894860/set- a-default-parameter-value-for-a-javascript işlevi) – vaxquis
olası bir kopyası [Javascript'te isteğe bağlı işlev parametreleri yapmak için daha iyi bir yol var mı?] (http: // stackoverflow. com/questions/148901/is-there-a-daha iyi-yapılacak-isteğe bağlı-işlev-parametreleri-in-javascript) – vaxquis