default-parameters - JavaScript 引数 複数 - JavaScriptの関数にデフォルトのパラメータ値を設定する

javascript デフォルト引数 オブジェクト / javascript / function / parameters / arguments

JavaScriptの関数で、デフォルトを設定したオプションの引数を持ち、その値が定義されていない場合は使用される(値が渡された場合は無視される)ようにしたいと思います。Rubyでは次のようにできます。

def read_file(file, delete_after = false)
  #コード
end

これはJavaScriptで動作しますか?

function read_file(file, delete_after = false) {
  //コード
}

Kamil Kiełczewski



Answer #1
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

このパターンは最もよく使われるものですが、次のような値を渡すときには危険です。

foo(0, 42)
foo( 0, 42 ); // 53 <-- Oops, not 42
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
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`がありません
foo( 5, null ); // 5 <-nullは `0`に強制します
foo( undefined, 6 ); // 17 <-`undefined`がありません
foo( null, 6 ); // 6 <-nullは `0`に強制します
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(); //「呼び出されたバー」
 // 8 13
foo( 10 ); //「呼び出されたバー」
 // 10 15
y = 6;
foo( undefined, 10 ); // 9 10
function foo( x =
 (function(v){ return v + 11; })( 31 )
) {
 console.log( x );
}
foo(); // 42