JavaScript i┼člevi i├žin varsay─▒lan bir parametre de─čeri ayarlama


Al─▒nan cevaba git


Bir JavaScript i┼člevinin, varsay─▒lan olarak belirledi─čim ve de─čer tan─▒mlanmad─▒─č─▒ takdirde kullan─▒lan (ve de─čer iletilirse yoksay─▒lan) kullan─▒lan iste─če ba─čl─▒ ba─č─▒ms─▒z de─či┼čkenleri olmas─▒n─▒ istiyorum. Ruby'de ┼č├Âyle yapabilirsiniz:

 def read_file(file, delete_after = false)
  # code
end
 

Bu JavaScript'te ├žal─▒┼č─▒yor mu?

 function read_file(file, delete_after = false) {
  // Code
}
 

2259









Cevap say─▒s─▒n─▒ say: 25






G├Ânderen ES6 / ES2015 , varsay─▒lan parametreleri dil ┼čartnamede bulunmaktad─▒r.

 function read_file(file, delete_after = false) {
  // Code
}
 

sadece i┼če yar─▒yor.

Referans: Varsay─▒lan Parametreler - MDN

Varsay─▒lan fonksiyon parametreleri, herhangi bir de─čer veya tan─▒ms─▒z iletilmezse, resmi parametrelerin varsay─▒lan de─čerlerle ba┼člat─▒lmas─▒n─▒ sa─člar .

Ayr─▒ca varsay─▒lan isimlendirilmi┼č parametreleri imha ederek sim├╝le edebilirsiniz :

 // the `= {}` below lets you call the function without any parameters
function myFor({ start = 5, end = 1, step = -1 } = {}) { // (A)
    // Use the variables `start`, `end` and `step` here
    ┬Ě┬Ě┬Ě
}
 

ES2015 ├Âncesi ,

├çok fazla yol var, ama bu benim tercih etti─čim y├Ântem - yanl─▒┼č ya da bo┼č dahil istedi─činiz herhangi bir ┼čeyi iletmenizi sa─člar. ( typeof null == "object" )

 function foo(a, b) {
  a = typeof a !== 'undefined' ? a : 42;
  b = typeof b !== 'undefined' ? b : 'default_b';
  ...
}
 

3196







 function read_file(file, delete_after) {
    delete_after = delete_after || "my default here";
    //rest of code
}
 

Bu atar delete_after de─čeri delete_after o de─čilse Falsey de─čeri aksi takdirde dize atar "my default here" . Daha fazla ayr─▒nt─▒ i├žin, Doug Crockford'un dil anketini inceleyin ve Operat├Ârler b├Âl├╝m├╝ne bak─▒n .

Bir ge├žmek istiyorsan─▒z bu yakla┼č─▒m i┼č yapmaz Falsey yani de─čerin false , null , undefined , 0 veya "" . E─čer falsey de─čerlerinin ge├žilmesi gerekiyorsa, Tom Ritter'─▒n cevab─▒ndaki y├Ântemi kullanman─▒z gerekir .

Bir i┼čleve bir dizi parametre ile ├žal─▒┼č─▒rken, t├╝keticinin bir nesnedeki parametre ba─č─▒ms─▒z de─či┼čkenlerini ge├žmesine ve ard─▒ndan bu de─čerleri i┼člev i├žin varsay─▒lan de─čerleri i├žeren bir nesneyle birle┼čtirmesine izin vermek genellikle yararl─▒d─▒r.

 function read_file(values) {
    values = merge({ 
        delete_after : "my default here"
    }, values || {});

    // rest of code
}

// simple implementation based on $.extend() from jQuery
function merge() {
    var obj, name, copy,
        target = arguments[0] || {},
        i = 1,
        length = arguments.length;

    for (; i < length; i++) {
        if ((obj = arguments[i]) != null) {
            for (name in obj) {
                copy = obj[name];

                if (target === copy) {
                    continue;
                }
                else if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }

    return target;
};
 

kullanmak

 // will use the default delete_after value
read_file({ file: "my file" }); 

// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" }); 
 

590







Ki┼čisel olarak daha ├Âzl├╝ ve okunakl─▒ olmas─▒ i├žin bunun gibi basit bir ┼čey buluyorum.

 function pick(arg, def) {
   return (typeof arg == 'undefined' ? def : arg);
}

function myFunc(x) {
  x = pick(x, 'my default');
} 
 

144







ECMAScript 6'da ger├žekten sahip olduklar─▒n─▒z─▒ tam olarak yazabileceksiniz:

 function read_file(file, delete_after = false) {
  // Code
}
 

Bu ayarlar delete_after i├žin false de─čil mevcut veya buysa undefined . Bunun gibi ES6 ├Âzelliklerini bug├╝n Babel gibi transpillerle kullanabilirsiniz .

Daha fazla bilgi i├žin MDN makalesine bak─▒n .


62







Varsay─▒lan Parametre De─čerleri

ES6 ile, JavaScript bir i┼člev parametresi i├žin varsay─▒lan bir de─čer ayarlamakla ilgili belki de en yayg─▒n deyimlerden birini yapabilirsiniz . Bunu y─▒llard─▒r yapma ┼čeklimiz olduk├ža tan─▒d─▒k gelmeli:

 function foo(x,y) {
 x = x || 11;
 y = y || 31;
 console.log( x + y );
}
foo(); // 42
foo( 5, 6 ); // 11
foo( 5 ); // 36
foo( null, 6 ); // 17
 

Bu kal─▒p en ├žok kullan─▒lan, ancak gibi de─čerleri ge├žti─čimizde tehlikelidir.

 foo(0, 42)
foo( 0, 42 ); // 53 <-- Oops, not 42
 

Niye ya? ├ç├╝nk├╝ 0 is falsy , ve b├Âylece, x || 11 results in 11 do─črudan 0'da ge├žmedi. Bu anla┼čmay─▒ d├╝zeltmek i├žin baz─▒ insanlar bunun yerine ├žekini daha ayr─▒nt─▒l─▒ olarak yazacaklar:

 function foo(x,y) {
 x = (x !== undefined) ? x : 11;
 y = (y !== undefined) ? y : 31;
 console.log( x + y );
}
foo( 0, 42 ); // 42
foo( undefined, 6 ); // 17
 

┼×imdi ES6 , varsay─▒lan de─čerlerin eksik arg├╝manlara atanmas─▒n─▒ kolayla┼čt─▒rmak i├žin eklenen faydal─▒ bir s├Âzdizimini inceleyebiliriz :

 function foo(x = 11, y = 31) {
 console.log( x + y );
}

foo(); // 42
foo( 5, 6 ); // 11
foo( 0, 42 ); // 42
foo( 5 ); // 36
foo( 5, undefined ); // 36 <-- `undefined` is missing
foo( 5, null ); // 5 <-- null coerces to `0`
foo( undefined, 6 ); // 17 <-- `undefined` is missing
foo( null, 6 ); // 6 <-- null coerces to `0`
 

x = 11 Bir i┼člev bildirgesinde, x !== undefined ? x : 11 ├žok daha yayg─▒n bir deyimden daha fazla oldu─ču gibi x || 11

Varsay─▒lan De─čer ─░fadeleri

Function varsay─▒lan de─čerler 31 gibi basit de─čerlerden daha fazlas─▒ olabilir; bunlar herhangi bir ge├žerli ifade olabilir, hatta function call :

 function bar(val) {
 console.log( "bar called!" );
 return y + val;
}
function foo(x = y + 3, z = bar( x )) {
 console.log( x, z );
}
var y = 5;
foo(); // "bar called"
 // 8 13
foo( 10 ); // "bar called"
 // 10 15
y = 6;
foo( undefined, 10 ); // 9 10
 

G├Ârebilece─činiz gibi, varsay─▒lan de─čer ifadeleri tembel olarak de─čerlendirilir, yani yaln─▒zca gerekti─činde ve gerekti─činde ├žal─▒┼čt─▒r─▒l─▒rlar - yani bir parametrenin arg├╝man─▒ atland─▒─č─▒nda veya tan─▒mlanmad─▒─č─▒nda.

Varsay─▒lan de─čer ifadesi, genellikle Hemen ├ça─čr─▒lan ─░┼člev ─░fadesi olarak adland─▒r─▒lan bir sat─▒r i├ži i┼člev ifade ifadesi bile olabilir (IIFE) :

 function foo( x =
 (function(v){ return v + 11; })( 31 )
) {
 console.log( x );
}
foo(); // 42
 

26







bu ├ž├Âz├╝m benim i├žin js'de i┼če yar─▒yor:

 function read_file(file, delete_after) {
    delete_after = delete_after || false;
    // Code
}
 

11







Sadece tan─▒ms─▒z ile a├ž─▒k bir kar┼č─▒la┼čt─▒rma kullan─▒n.

 function read_file(file, delete_after)
{
    if(delete_after === undefined) { delete_after = false; }
}
 

9







G├╝ncelleme olarak ... ECMAScript 6 ile ┼ču ┼čekilde i┼člev parametresi bildirimlerinde Nihai olarak de─čerleri ayarlayabilirsiniz:

 function f (x, y = 7, z = 42) {
  return x + y + z
}

f(1) === 50
 

- http://es6-features.org/#DefaultParameterValues taraf─▒ndan referans verildi─či gibi


8







uzun zamand─▒r C ++ geli┼čtiricisi (Rookie to web development :)), bu duruma ilk kar┼č─▒la┼čt─▒─č─▒mda, soru tan─▒m─▒nda oldu─ču gibi, fonksiyon tan─▒m─▒nda parametre atamas─▒n─▒ ┼ču ┼čekilde yapt─▒m.

 function myfunc(a,b=10)
 

Ancak, taray─▒c─▒larda tutarl─▒ bir ┼čekilde ├žal─▒┼čmad─▒─č─▒n─▒ unutmay─▒n. Benim i├žin masa├╝st├╝mde krom ├╝zerinde ├žal─▒┼čt─▒, ancak robot ├╝zerinde krom ├╝zerinde ├žal─▒┼čmad─▒. Yukar─▒da da belirtildi─či gibi daha g├╝venli bir se├ženek -

     function myfunc(a,b)
    {
    if (typeof(b)==='undefined') b = 10;
......
    }
 

Bu cevab─▒n amac─▒, ba┼čkalar─▒n─▒n daha ├Ânce bahsetti─či ayn─▒ ├ž├Âz├╝mleri tekrar etmek de─čil, fonksiyon tan─▒m─▒ndaki parametre atamas─▒n─▒n baz─▒ taray─▒c─▒larda i┼če yarayabilece─čini bildirmektir.


7







Javascript'te varsay─▒lan parametre de─čerlerini kullan─▒rken son derece dikkatli olman─▒z─▒ tavsiye ederim. Genellikle gibi y├╝ksek mertebeden fonksiyonlar─▒ ile birlikte kullan─▒ld─▒─č─▒nda hatalar─▒ olu┼čturur forEach , map ve reduce . ├ľrne─čin, bu kod sat─▒r─▒n─▒ g├Âz ├Ân├╝nde bulundurun:

 ['1', '2', '3'].map(parseInt); // [1, NaN, NaN]
 

parseInt iste─če ba─čl─▒ ikinci bir parametrenin function parseInt(s, [ k├Âk =10]) ancak harita ├ža─čr─▒lar─▒ parseInt (├╝├ž ba─č─▒ms─▒z de─či┼čken ile eleman , dizin ve dizi ).

Gerekli parametrelerinizi iste─če ba─čl─▒ / varsay─▒lan de─čerli arg├╝manlar─▒n─▒zdan ay─▒rman─▒z─▒ ├Âneririm. E─čer fonksiyonunuz, herhangi bir varsay─▒lan de─čerin anlam ifade etmemesi i├žin 1,2 veya 3 gerekli parametreyi al─▒rsa, fonksiyona pozisyonel parametreler koyun, iste─če ba─čl─▒ t├╝m parametreler tek bir nesnenin adland─▒r─▒lm─▒┼č nitelikleri olarak izlenmelidir. E─čer fonksiyonunuz 4 veya daha fazla s├╝rerse, belki de t├╝m arg├╝manlar─▒ tek bir nesne parametresinin nitelikleriyle sa─člamak daha mant─▒kl─▒ olur.

Senin durumunda ben b├Âyle senin deleteFile i┼člevi yazmak ├Âneririm: ( ba┼č─▒na d├╝zenlenmi┼č instead bireyin yorumlarla ) ...

 // unsafe
function read_file(fileName, deleteAfter=false) {
    if (deleteAfter) {
        console.log(`Reading and then deleting ${fileName}`);
    } else {
        console.log(`Just reading ${fileName}`);
    }
}

// better
function readFile(fileName, options) {
  const deleteAfter = !!(options && options.deleteAfter === true);
  read_file(fileName, deleteAfter);
}

console.log('unsafe...');
['log1.txt', 'log2.txt', 'log3.txt'].map(read_file);

console.log('better...');
['log1.txt', 'log2.txt', 'log3.txt'].map(readFile); 

Yukar─▒daki pasaj─▒ ├žal─▒┼čt─▒rmak, kullan─▒lmayan parametreler i├žin varsay─▒lan arg├╝man de─čerlerinin arkas─▒nda gizlenen tehlikeleri g├Âsterir.


7







Orada kodun Microsoft Edge'de ├žal─▒┼čmas─▒yla ilgilenen herkes i├žin, i┼člev parametrelerinde varsay─▒lanlar─▒ kullanmay─▒n.

 function read_file(file, delete_after = false) {
    #code
}
 

Bu ├Ârnekte Edge "Bekleyen ')'" hatas─▒ verir

Bu kullan─▒m─▒ a┼čmak i├žin

 function read_file(file, delete_after) {
  if(delete_after == undefined)
  {
    delete_after = false;
  }
  #code
}
 

08 A─čustos 2016 itibariyle bu hala bir sorun


6







S├Âzdizimine g├Âre

 function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
   statements
}
 

formal parametrelerin varsay─▒lan de─čerini tan─▒mlayabilirsiniz. ve ayr─▒ca tan─▒mlanmam─▒┼č de─čeri typeof i┼člevini kullanarak kontrol edin .


3







 function helloWorld(name, symbol = '!!!') {
    name = name || 'worlds';
    console.log('hello ' + name + symbol);
}

helloWorld(); // hello worlds!!!

helloWorld('john'); // hello john!!!

helloWorld('john', '(>.<)'); // hello john(>.<)

helloWorld('john', undefined); // hello john!!!

helloWorld(undefined, undefined); // hello worlds!!!
 

3







Son ECMA6 s├Âzdizimini kullanmak istiyorsan─▒z bunu kullan─▒n :

 function myFunction(someValue = "This is DEFAULT!") {
  console.log("someValue --> ", someValue);
}

myFunction("Not A default value") // calling the function without default value
myFunction()  // calling the function with default value 

Denir default function parameters . Hi├žbir de─čer veya tan─▒ms─▒z ge├žilmezse, formal parametrelerin varsay─▒lan de─čerlerle ba┼člat─▒lmas─▒n─▒ sa─člar. NOT : Internet Explorer veya daha eski taray─▒c─▒larla ├žal─▒┼čmaz.

M├╝mk├╝n olan maksimum uyumluluk i├žin ┼čunu kullan─▒n:

 function myFunction(someValue) {
  someValue = (someValue === undefined) ? "This is DEFAULT!" : someValue;
  console.log("someValue --> ", someValue);
}

myFunction("Not A default value") // calling the function without default value
myFunction()  // calling the function with default value 

Her iki fonksiyon da bu ├Ârneklerin her biriyle ayn─▒ davran─▒┼ča sahiptir, undefined bu fonksiyonu ├ža─č─▒r─▒rken herhangi bir parametre de─čeri ge├žilmezse , parametre de─či┼čkeninin olaca─č─▒ ger├že─čine dayan─▒r .


3







ES6: Daha ├Ânce cevaplar─▒n ├žo─čunda belirtildi─či gibi, ES6'da, bir de─čeri basit bir de─čerle birlikte ba┼člatabilirsiniz.


ES5: Verilen cevaplar─▒n ├žo─ču ben gibi Falsey de─čerler ge├žirmek gerekebilir durumlar vard─▒r ├ž├╝nk├╝ benim i├žin iyi de─čil yeterli 0 , null ve undefined bir i┼čleve. Bir parametrenin tan─▒ms─▒z olup olmad─▒─č─▒n─▒ belirlemek i├žin, ├ž├╝nk├╝ tan─▒mlanmad─▒─č─▒ i├žin tan─▒ms─▒z yerine ge├žirdi─čim de─čer, bunu yap─▒yorum:

 function foo (param1, param2) {
   param1 = arguments.length >= 1 ? param1 : "default1";
   param2 = arguments.length >= 2 ? param2 : "default2";
}
 

3







 function throwIfNoValue() {
throw new Error('Missing argument');
}
function foo(argValue = throwIfNoValue()) {
return argValue ;
} 

Burada foo () argValue adl─▒ bir parametreye sahip bir fonksiyondur. Buradaki i┼člev ├ža─čr─▒s─▒nda hi├žbir ┼čey iletmezsek, o zaman throwIfNoValue () i┼člevi ├ža─čr─▒lacak ve d├Ând├╝r├╝len sonu├ž sadece argValue arg├╝man─▒na atanacakt─▒r. ─░┼člev ├ža─čr─▒s─▒n─▒n varsay─▒lan parametre olarak kullan─▒lmas─▒ bu ┼čekildedir. Hangi kod daha basit ve okunabilir hale getirir.

Bu ├Ârnek buradan al─▒nm─▒┼čt─▒r


2







Kullan─▒yorsan─▒z, ES6+ varsay─▒lan parametreleri a┼ča─č─▒daki ┼čekilde ayarlayabilirsiniz:

 function test (foo = 1, bar = 2) {
  console.log(foo, bar);
}

test(5); // foo gets overwritten, bar remains default parameter 

ES5 S├Âzdizimine ihtiyac─▒n─▒z varsa , a┼ča─č─▒daki ┼čekilde yapabilirsiniz:

 function test(foo, bar) {
  foo = foo || 2;
  bar = bar || 0;
  
  console.log(foo, bar);
}

test(5); // foo gets overwritten, bar remains default parameter 

Yukar─▒daki s├Âzdiziminde OR operat├Âr kullan─▒l─▒r. OR Bu d├Ân├╝┼čt├╝r├╝lebilir e─čer operat├Âr her zaman ilk de─čerini verir true o rightHandSide de─čerini d├Ând├╝r├╝r de─čilse. Fonksiyon kar┼č─▒l─▒k gelen bir arg├╝man olmadan ├ža─čr─▒ld─▒─č─▒nda, parametre de─či┼čkeni ( bar ├Ârne─čimizde) undefined JS motoru taraf─▒ndan ayarlan─▒r . undefined Daha sonra false d├Ân├╝┼čt├╝r├╝l├╝r ve b├Âylece OR operat├Âr 0 de─čerini d├Ând├╝r├╝r.


2







Herhangi bir nedenle varsa de─čil ES6 ve edilir kullanarak lodash burada arac─▒l─▒─č─▒yla i┼člev parametreleri varsay─▒lan ├Âzl├╝ bir yoldur _.defaultTo y├Ântemle:

 var fn = function(a, b) {
  a = _.defaultTo(a, 'Hi')
  b = _.defaultTo(b, 'Mom!')

  console.log(a, b)
}

fn()                 // Hi Mom!
fn(undefined, null)  // Hi Mom!
fn(NaN, NaN)         // Hi Mom!
fn(1)                // 1 "Mom!"
fn(null, 2)          // Hi 2
fn(false, false)     // false false
fn(0, 2)             // 0 2 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script> 

Ge├žerli de─čer NaN , null veya undefined ise varsay─▒lan


1







Evet, varsay─▒lan parametreleri kullanmak ES6'da tamamen desteklenir :

 function read_file(file, delete_after = false) {
  // Code
}
 

veya

 const read_file = (file, delete_after = false) => {
    // Code
}
 

ancak ES5'ten ├Ânce bunu kolayca yapabilirsiniz:

 function read_file(file, delete_after) {
  var df = delete_after || false;
  // Code
}
 

Bu de─čer varsa, de─čeri kullan─▒n, aksi takdirde || i┼člemden sonra ikinci de─čeri kullan─▒n;

Not: E─čer bir de─čer ge├žirmesi durumunda da bu aras─▒nda b├╝y├╝k bir fark vard─▒r ES6 gibi yeni de─čer, bir ┼čey ile de─či┼čtirilir olaca─č─▒n─▒, hatta de─čer falsy olmak bir null ya "" ... ama ES5 sadece iletilen de─čerin e─čer biri sadece de─či┼čtirilecektir truthy, ├ž├╝nk├╝ bu ┼čekilde || ├žal─▒┼čma ...


1







 def read_file(file, delete_after = false)
  # code
end
 

A┼ča─č─▒daki kod ECMAScript 6 (ES6) ve ├Ânceki s├╝r├╝mleri i├žeren bu durumda ├žal─▒┼čabilir.

 function read_file(file, delete_after) {
    if(delete_after == undefined)
        delete_after = false;//default value

    console.log('delete_after =',delete_after);
}
read_file('text1.txt',true);
read_file('text2.txt'); 

Dillerde varsay─▒lan de─čer, i┼člevin ├ža─čr─▒ld─▒─č─▒ s─▒rada i┼člevin parametre de─čeri atland─▒─č─▒nda ├žal─▒┼čt─▒─č─▒ i├žin JavaScript'te tan─▒ms─▒z olarak atanm─▒┼čt─▒r . Bu yakla┼č─▒m programsal olarak ├žekici g├Âr├╝nm├╝yor, ancak geriye d├Ân├╝k uyumlulu─ča sahip .


0







Evet, bu varsay─▒lan parametre olarak adland─▒r─▒l─▒r.

Varsay─▒lan fonksiyon parametreleri, herhangi bir de─čer veya tan─▒ms─▒z iletilmezse, resmi parametrelerin varsay─▒lan de─čerlerle ba┼člat─▒lmas─▒n─▒ sa─člar.

S├Âzdizimi:

 function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
   statements
}
 

A├ž─▒klama:

Fonksiyonlar─▒n parametreleri varsay─▒lan olarak tan─▒ms─▒zd─▒r Ancak, baz─▒ durumlarda farkl─▒ bir varsay─▒lan de─čer ayarlamak faydal─▒ olabilir. Bu, varsay─▒lan parametrelerin yard─▒mc─▒ olabilece─či yerdir.

Ge├žmi┼čte, varsay─▒lanlar─▒n ayarlanmas─▒ i├žin genel strateji, fonksiyonun g├Âvdesindeki parametre de─čerlerini test etmek ve tan─▒mlanmam─▒┼čsa bir de─čer atamakt─▒. ├ça─čr─▒da hi├žbir de─čer belirtilmezse, de─čeri tan─▒ms─▒z olacakt─▒r. Parametrenin tan─▒mlanmad─▒─č─▒ndan emin olmak i├žin bir ┼čartl─▒ kontrol ayarlaman─▒z gerekir.

ES2015'teki varsay─▒lan parametrelerle, fonksiyon g├Âvdesindeki kontrol art─▒k gerekli de─čildir. ┼×imdi fonksiyon ba┼čl─▒─č─▒na basit├že varsay─▒lan bir de─čer koyabilirsiniz.

Farkl─▒l─▒klara ├Ârnek:

 // OLD METHOD
function multiply(a, b) {
  b = (typeof b !== 'undefined') ?  b : 1;
  return a * b;
}

multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5);    // 5


// NEW METHOD
function multiply(a, b = 1) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5);    // 5
 

Farkl─▒ S├Âzdizimi ├ľrnekleri:

Doldurma tan─▒mlanmam─▒┼č vs di─čer sahte de─čerler:

De─čer ├ža─čr─▒l─▒rken a├ž─▒k├ža ayarlanm─▒┼č olsa bile, num arg├╝man─▒n─▒n de─čeri varsay─▒lan de─čerdir.

 function test(num = 1) {
  console.log(typeof num);
}

test();          // 'number' (num is set to 1)
test(undefined); // 'number' (num is set to 1 too)

// test with other falsy values:
test('');        // 'string' (num is set to '')
test(null);      // 'object' (num is set to null)
 

Arama zaman─▒nda de─čerlendirildi:

Varsay─▒lan arg├╝man ├ža─čr─▒ s─▒ras─▒nda de─čerlendirilir, bu nedenle di─čer dillerden farkl─▒ olarak, i┼člev her ├ža─čr─▒ld─▒─č─▒nda yeni bir nesne olu┼čturulur.

 function append(value, array = []) {
  array.push(value);
  return array;
}

append(1); //[1]
append(2); //[2], not [1, 2]


// This even applies to functions and variables
function callSomething(thing = something()) {
 return thing;
}

function something() {
  return 'sth';
}

callSomething();  //sth
 

Varsay─▒lan parametreler daha sonra varsay─▒lan parametreler i├žin kullan─▒labilir:

Daha ├Ânce kar┼č─▒la┼č─▒lan paramlar daha sonra varsay─▒lan parametreler i├žin kullan─▒labilir

 function singularAutoPlural(singular, plural = singular + 's',
                        rallyingCry = plural + ' ATTACK!!!') {
  return [singular, plural, rallyingCry];
}

//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural('Gecko');

//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural('Fox', 'Foxes');

//["Deer", "Deer", "Deer ... change."]
singularAutoPlural('Deer', 'Deer', 'Deer peaceably and respectfully \ petition the government for positive change.')
 

─░┼člev g├Âvdesinde tan─▒mlanan i┼člevler:

Gecko 33'te tan─▒t─▒lm─▒┼čt─▒r (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30). ─░┼člev g├Âvdesinde bildirilen i┼člevler, varsay─▒lan parametrelerin i├žinde belirtilemez ve bir ReferenceError alamaz (┼ču anda SpiderMonkey'de bir TypeError, bkz. Hata 1022967). Varsay─▒lan parametreler her zaman ├Ânce ├žal─▒┼čt─▒r─▒l─▒r, i┼člev g├Âvdesindeki i┼člev bildirimleri daha sonra de─čerlendirilir.

 // Doesn't work! Throws ReferenceError.
function f(a = go()) {
  function go() { return ':P'; }
}
 

Varsay─▒lan parametrelerden sonra varsay─▒lan olmayan parametreler:

Gecko 26'dan ├Ânce (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2), a┼ča─č─▒daki kod SyntaxError ile sonu├žland─▒. Bu hata 777060'da d├╝zeltildi ve sonraki s├╝r├╝mlerde beklendi─či gibi ├žal─▒┼č─▒yor. Parametreler hala soldan sa─ča ayarlan─▒r, varsay─▒lan olmayan parametreler olsa bile varsay─▒lan parametrelerin ├╝zerine yaz─▒l─▒r.

 function f(x = 1, y) {
  return [x, y];
}

f(); // [1, undefined]
f(2); // [2, undefined]
 

Varsay─▒lan de─čer atamas─▒ ile tahrip edilmi┼č parametre:

Y─▒k─▒m atamas─▒ notasyonu ile varsay─▒lan de─čer atamas─▒n─▒ kullanabilirsiniz.

 function f([x, y] = [1, 2], {z: z} = {z: 3}) {
  return x + y + z;
}

f(); // 6
 

0







Varsay─▒lan paragraflar─▒ ayarlamak i├žin sadece farkl─▒ bir yakla┼č─▒m, do─črudan ba─č─▒ms─▒z de─či┼čkenler yerine, ba─č─▒ms─▒z de─či┼čkenlerin nesne haritas─▒n─▒ kullanmakt─▒r. ├ľrne─čin,

 const defaultConfig = {
 category: 'Animals',
 legs: 4
};

function checkOrganism(props) {
 const category = props.category || defaultConfig.category;
 const legs = props.legs || defaultConfig.legs;
}
 

Bu ┼čekilde, arg├╝manlar─▒ geni┼čletmek kolayd─▒r ve arg├╝man uzunlu─ču uyu┼čmazl─▒─č─▒ konusunda endi┼čelenmeyin.


0







Gelece─čin Sesleri

Gelecekte, bir nesneyi bir ba┼čkas─▒na "yayabilir" (┼ču an Edge taraf─▒ndan desteklenmeyen 2019'dan itibaren ) - s─▒ras─▒na bakmaks─▒z─▒n g├╝zel varsay─▒lan se├ženekler i├žin bunun nas─▒l kullan─▒laca─č─▒n─▒ g├Âsteren bir tan─▒t─▒m:

 function test(options) {
    var options = {
       // defaults
       url: 'defaultURL',
       some: 'somethingDefault',
       // override with input options
       ...options
    };
    
    var body = document.getElementsByTagName('body')[0];
    body.innerHTML += '<br>' + options.url + ' : ' + options.some;
}
test();
test({});
test({url:'myURL'});
test({some:'somethingOfMine'});
test({url:'overrideURL', some:'andSomething'});
test({url:'overrideURL', some:'andSomething', extra:'noProblem'}); 

MDN referans─▒: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

... bu arada Edge'in destekledi─či ┼čey Object.assign () (IE yok, ama ger├žekten IE'yi geride b─▒rakabilece─čimizi umuyorum :))

Benzer ┼čekilde yapabilirdi

     function test(options) {
        var options = Object.assign({
           // defaults
           url: 'defaultURL',
           some: 'somethingDefault',
        }, options); // override with input options
        
        var body = document.getElementsByTagName('body')[0];
        body.innerHTML += '<br>' + options.url + ' : ' + options.some;
    }
    test();
    test({});
    test({url:'myURL'});
    test({some:'somethingOfMine'});
    test({url:'overrideURL', some:'andSomething'});
    test({url:'overrideURL', some:'andSomething', extra:'noProblem'}); 


0







Cevap Evet. Asl─▒nda, varsay─▒lan parametreleri destekleyen bir├žok dil vard─▒r. Python onlardan biri:

 def(a, enter="Hello"):
   print(a+enter)
 

Bu parantezler nedeniyle Python 3 kodu olmas─▒na ra─čmen, fonksiyonlardaki varsay─▒lan parametreler JS'de de ├žal─▒┼č─▒r.

├ľrne─čin ve sizin durumunuzda:

 function read_file(file, deleteAfter=false){
  console.log(deleteAfter);
}

read_file("test.txt"); 

Ancak bazen ger├žekten varsay─▒lan parametrelere ihtiya├ž duymazs─▒n─▒z.

De─či┼čkeni fonksiyonun ba┼člamas─▒ndan hemen sonra tan─▒mlayabilirsiniz:

 function read_file(file){
  var deleteAfter = false;
  console.log(deleteAfter);
}

read_file("test.txt"); 

Her iki ├Ârne─čimde de ayn─▒ ┼čeyi d├Ând├╝r├╝r. Ancak bazen ├žok geli┼čmi┼č projelerdeki gibi faydal─▒ olabilirler.

Sonu├ž olarak, JS'de varsay─▒lan parametre de─čerleri kullan─▒labilir. Ancak, fonksiyonun ba┼člamas─▒ndan hemen sonra bir de─či┼čkeni tan─▒mlamakla ayn─▒ ┼čeydir. Ancak, bazen onlar hala ├žok faydal─▒d─▒r. Sizin de fark edebilece─činiz gibi, varsay─▒lan parametre de─čerleri, e─čer fonksiyon ba┼člarsa, parametreyi tan─▒mlayan standart yoldan 1 daha az kod sat─▒r─▒ al─▒r.

EDIT: Ve bu ├žok ├Ânemli! Bu olacak de─čil IE'de ├žal─▒┼č─▒r. Belgelere bak─▒n─▒z. Bu y├╝zden IE ile "i┼člev ├╝st├╝ndeki de─či┼čken tan─▒mla" y├Ântemini kullanman─▒z gerekir. Varsay─▒lan parametreler IEÔÇÖde ├žal─▒┼čmaz.


-1







Evet, bu Javascript'te ├žal─▒┼čacak. Bunu da yapabilirsiniz:

 function func(a=10,b=20)
{
    alert (a+' and '+b);
}

func(); // Result: 10 and 20

func(12); // Result: 12 and 20

func(22,25); // Result: 22 and 25
 

-3



─░lgili yay─▒nlar


Java varsay─▒lan parametre de─čerlerini destekliyor mu?

C++ 'da varsay─▒lan parametre de─čeri nereye yaz─▒l─▒r? [├žift]

T├╝m Android uygulamas─▒ i├žin varsay─▒lan font ailesi nas─▒l ayarlan─▒r

JavaScript i┼člevlerinde varsay─▒lan de─či┼čken de─čerleri [duplicate]

Django varsay─▒lan form de─čerlerini ayarla

Python'da tip hint ile varsay─▒lan parametre de─čeri ekleme

<select> de─čerini val () i┼čleviyle ayarlarken change () olay─▒ tetiklenir

C# 4 varsay─▒lan parametre de─čerleri: Varsay─▒lan DateTime / nesne de─čeri nas─▒l atan─▒r? [├žift]

Varsay─▒lan parametre de─čeri olarak SQL i┼člevi?

PEP 8, neden anahtar kelime arg├╝man─▒nda '=' etraf─▒nda bo┼čluk yok veya bir varsay─▒lan parametre de─čeri?

Etiketle ilgili di─čer sorular [javascript]


De─či┼čkenin 'tan─▒ms─▒z' veya 'bo┼č' olup olmad─▒─č─▒n─▒ nas─▒l belirleyebilirim?

Es6 s─▒n─▒flar─▒ kullan─▒l─▒rken React'te ÔÇťsuper ()ÔÇŁ ve ÔÇťsuper (props)ÔÇŁ aras─▒ndaki fark nedir?

Her zaman aral─▒k () yerine xrange () y├Ântemini mi kullanmal─▒s─▒n─▒z?

Python ile yaz─▒lm─▒┼č CSV dosyas─▒nda her sat─▒r aras─▒nda bo┼č sat─▒rlar var

nodejs vs nub 12.04 ├╝zerindeki d├╝─č├╝m

PHP'de dizileri ve verileri nas─▒l s─▒ralayabilirim?

Ayr─▒ bir Javascript dosyas─▒ olmayan web ├žal─▒┼čanlar─▒?

Neden bir GET iste─či yerine OPTIONS iste─či al─▒yorum?

─░ki tarih aras─▒ndaki tarihleri ÔÇőÔÇőse├žmek i├žin SQL sorgusu

Renklendirilmi┼č Ruby ├ž─▒k─▒┼č─▒ [kapal─▒]