— y2sunlight 2021-04-05
JavaScriptでは引数の数をチェックしない。
function func(arg) { console.log(arg); } func(); // 出力:undefined func(1); // 出力:1 func(1, 2); // 出力:1
引数の有無は関数内でundefinedによって判断する。
function getArea(height, width) { if (height === undefined) height = 0; if (width === undefined) width = 0; return height * width; } console.log(getArea()); // 出力:0 console.log(getArea(10)); // 出力:0 console.log(getArea(10, 20)); // 出力:200
argumentsオブジェクトは関数呼び出し時に自動的に生成され、引数の数とそれぞれの値を取得できる。
function getArea(height, width) { return arguments.length < 2 ? 0 : arguments[0] * arguments[1]; } console.log(getArea()); // 出力:0 console.log(getArea(10)); // 出力:0 console.log(getArea(10, 20)); // 出力:200
function max() { if(arguments.length > 0) { var m = arguments[0]; for (let i = 1, len = arguments.length; i <len; i++) if(m < arguments[i]) m = arguments[i]; return m; } } console.log(max()); // 出力:undefined console.log(max(10)); // 出力:10 console.log(max(10, 5, 20, 8)); // 出力:20
function 関数名(引数=デフォルト値, …)
function getArea(height=0, width=0) { return height * width; } console.log(getArea()); // 出力:0 console.log(getArea(10)); // 出力:0 console.log(getArea(10, 20)); // 出力:200
function 関数名(引数名, ・・・, ...引数名)
function mySum(...values) { let sum = 0; for(v of values) sum += v; return sum; } console.log(mySum()); // 出力:0 console.log(mySum(1)); // 出力:1 console.log(mySum(1,2,3,4)); // 出力:10
※ argumentsと異なり可変長引数はArrayオブジェクトである。
関数名(...配列オブジェクト); // 配列オブジェクトは仮引数リストに展開される
function mySum(...values) { let sum = 0; for(v of values){ sum += v; } return sum; } console.log(mySum(...[1, 2, 3, 4])); // 配列は仮引数リストに展開される 出力:10 console.log(mySum([1, 2, 3, 4])); // スカラと配列の足し算が行われ文字列として表示される 出力:01,2,3,4
function getArea({height=0, width=0}) { return height * width; } console.log(getArea({height:10, width:20})); // 出力:200