JavaScript:argumentsオブジェクトとcalleeプロパティ
JavaScript関数に引数が送信されていないかどうかを判断する方法
arguments.length プロパティを使用する
arguments
オブジェクトは、関数に渡されたすべての引数をプロパティとして保持します。arguments.length
プロパティは、関数に渡された引数の数を返します。
function myFunction(arg1, arg2) {
if (arguments.length === 0) {
console.log("引数が送信されていません");
} else {
console.log("引数が送信されています");
}
}
myFunction(); // "引数が送信されていません"
myFunction(1, 2); // "引数が送信されています"
デフォルト引数を使用する
引数にデフォルト値を設定すると、引数が送信されていない場合にデフォルト値が使用されます。
function myFunction(arg1 = "デフォルト値") {
console.log(arg1);
}
myFunction(); // "デフォルト値"
myFunction("引数"); // "引数"
undefined をチェックする
引数が送信されていない場合、その引数の値は undefined
になります。
function myFunction(arg1) {
if (arg1 === undefined) {
console.log("引数が送信されていません");
} else {
console.log("引数が送信されています");
}
}
myFunction(); // "引数が送信されていません"
myFunction(1); // "引数が送信されています"
オプション引数を使用する
引数がオプションであることを示すために、...
演算子を使用してオプション引数を定義できます。
function myFunction(arg1, ...optionalArgs) {
if (optionalArgs.length === 0) {
console.log("オプション引数が送信されていません");
} else {
console.log("オプション引数が送信されています");
}
}
myFunction(1); // "オプション引数が送信されていません"
myFunction(1, 2, 3); // "オプション引数が送信されています"
これらの方法のいずれを使用しても、JavaScript関数に引数が送信されていないかどうかを簡単に判断できます。どの方法を使用するかは、コードのスタイルと要件によって異なります。
上記以外にも、以下のような方法で引数が送信されていないかどうかを判断できます。
arguments
オブジェクトにcallee
プロパティを使用して、呼び出し元の関数の名前を取得し、その関数の定義を確認する。- 関数の引数をチェックするコードを別の関数にラップし、そのラッパー関数を呼び出す。
これらの方法は、上記の方法よりも複雑ですが、より柔軟なソリューションを提供する場合があります。
// 1. arguments.length プロパティを使用する
function myFunction(arg1, arg2) {
if (arguments.length === 0) {
console.log("引数が送信されていません");
} else {
console.log("引数が送信されています");
}
}
myFunction(); // "引数が送信されていません"
myFunction(1, 2); // "引数が送信されています"
// 2. デフォルト引数を使用する
function myFunction(arg1 = "デフォルト値") {
console.log(arg1);
}
myFunction(); // "デフォルト値"
myFunction("引数"); // "引数"
// 3. undefined をチェックする
function myFunction(arg1) {
if (arg1 === undefined) {
console.log("引数が送信されていません");
} else {
console.log("引数が送信されています");
}
}
myFunction(); // "引数が送信されていません"
myFunction(1); // "引数が送信されています"
// 4. オプション引数を使用する
function myFunction(arg1, ...optionalArgs) {
if (optionalArgs.length === 0) {
console.log("オプション引数が送信されていません");
} else {
console.log("オプション引数が送信されています");
}
}
myFunction(1); // "オプション引数が送信されていません"
myFunction(1, 2, 3); // "オプション引数が送信されています"
このサンプルコードを実行すると、以下の出力が得られます。
引数が送信されていません
引数が送信されています
引数が送信されていません
引数が送信されています
オプション引数が送信されていません
オプション引数が送信されています
JavaScript関数に引数が送信されていないかどうかを判断するその他の方法
arguments
オブジェクトには、呼び出し元の関数の名前を取得できる callee
プロパティがあります。このプロパティを使用して、呼び出し元の関数の定義を確認することで、引数が送信されているかどうかを判断できます。
function myFunction(arg1) {
if (arguments.callee.name === "myFunction" && arguments.length === 0) {
console.log("引数が送信されていません");
} else {
console.log("引数が送信されています");
}
}
myFunction(); // "引数が送信されていません"
myFunction(1); // "引数が送信されています"
function checkArgs(func) {
if (arguments.length === 0) {
console.log("引数が送信されていません");
} else {
func.apply(this, arguments);
}
}
function myFunction(arg1) {
console.log(arg1);
}
checkArgs(myFunction); // "引数が送信されていません"
checkArgs(myFunction, 1); // "1"
その他のライブラリを使用する
underscore.js
などのライブラリには、引数が送信されているかどうかを判断するためのユーティリティ関数が含まれています。
// underscore.jsを使用
_.isUndefined(arg1); // 引数が送信されていない場合はtrueを返す
javascript arguments