深入浅出ES 6(五):不定パラメータとデフォルトパラメータ
今日のこの文章はJavaScript関数文法をより表現力に富んだ二つの新しい特性をもたらします.
不定パラメータ
私たちは通常、可変パラメータ関数を使用してAPIを構成し、可変パラメータ関数は任意の数のパラメータを受け入れることができる.例えば、String.prototype.co ncat方法は、任意の数の文字列パラメータを受け入れることができる.ES 6は、可変パラメータを作成する新しい方法を提供します.
簡単な可変パラメータ関数containsAllを通して,不安定パラメータの使い方を実証した.関数containsAllは、文字列の中にいくつかのサブストリングが含まれているかを確認してもいいです.例えば、containsAll(「bana」、「b」、「nan」)はtrueに戻り、containsAll(「bana」、「c」、「nan」)はfalseに戻ります.
最初にこの関数を達成するために伝統的な方法を使用します.
function containsAll(haystack) {
for (var i = 1; i < arguments.length; i++) {
var needle = arguments[i];
if (haystack.indexOf(needle) === -1) {
return false;
}
}
return true;
}
, arguments , , 。 , 。 haystack, 。 , , 1 , 0 , arguments[0] haystack。 haystack , 。 。 ES6 containsAll :
function containsAll(haystack, ...needles) {
for (var needle of needles) {
if (haystack.indexOf(needle) === -1) {
return false;
}
}
return true;
}
containsAll , ...needles 。 containsAll("banana", "b", "nan") , , "banana" haystack,needles , , needles。 ,needles ["b", "nan"], 。( , ES6 for-of 。)
, 。 , , “ ” 。 , , undefined。
, , 。JavaScript , undefined。ES6 , 。
( , 。):
function animalSentence(animals2="tigers", animals3="bears") {
return `Lions and ${animals2} and ${animals3}! Oh my!`;
}
[param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]], , = , , 。 :
animalSentence(); // Lions and tigers and bears! Oh my!
animalSentence("elephants"); // Lions and elephants and bears! Oh my!
animalSentence("elephants", "whales"); // Lions and elephants and whales! Oh my!
:
-
, Python 。 , 。 , :
function animalSentenceFancy(animals2="tigers",
animals3=(animals2 == "bears") ? "sealions" : "bears")
{
return `Lions and ${animals2} and ${animals3}! Oh my!`;
}
,animalSentenceFancy("bears") “Lions and bears and sealions. Oh my!”。
-
undefined , animalSentence(undefined, "unicorns") “Lions and tigers and unicorns! Oh my!”。
-
undefined,
function myFunc(a=42, b) {...}
,
function myFunc(a=42, b=undefined) {...}
arguments
arguments , arguments 。 , , arguments JavaScript 。
arguments, , : arguments 。 arguments , , 。
Firefox 15 。
, 。V8 , V8 issue ,JSC issue 。
Babel Traceur , 。
, JavaScript 。 !
: Benjamin Peterson Firefox , , 。
, 、 、 , ES6 。 , , 、 。 ? ? Mozilla Nick Fitzgerald 《 ES6 》。
142