高木のブログ

【JavaScript】関数の引数チェック

2022/04/23

JavaScript はデフォルトで引数のチェックを行わない

function greeting(str) {
    console.log("Hello, " + str);
}

greeting("world"); // Hello, world
greeting(); // Hello, undefined
greeting("world", "happy"); // Hello, world

足りない引数の値は undefined になり、多く引数を渡しても使われないだけでエラーにならない

自前で引数チェックを実装する

引数の有無をチェックする

引数の値が undefined かどうかチェックする

function greeting(str) {
    if (str === undefined) {
        throw new Error("引数を指定してください");
    }
    console.log("Hello, " + str);
}

greeting("world"); // Hello, world
greeting(); // Error: 引数を指定してください

引数の数をチェックする

arguments という変数に引数の配列が入っているので、その数をチェックする

function greeting(str) {
    if (arguments.length > 1) {
        throw new Error("引数は1つにしてください");
    }
    console.log("Hello, " + str);
}

greeting("world"); // Hello, world
greeting("world", "happy"); // Error: 引数は1つにしてください

アロー関数には arguments がないので、残余引数を使ってチェックする

const greeting = (str, ...others) => {
    if (others.length > 0) {
        throw new Error("引数は1つにしてください");
    }
    console.log("Hello, " + str);
}

greeting("world"); // Hello, world
greeting("world", "happy"); // Error: 引数は1つにしてください

引数の型をチェックする

typeof 演算子を使って引数の型をチェックする

function greeting(str) {
    if (typeof str !== "string") {
        throw new Error("引数は文字列型にしてください");
    }
    console.log("Hello, " + str);
}

greeting("world"); // Hello, world
greeting(123); // Error: 引数は文字列型にしてください

参考

ソフトウェアデザイン 2022年2月号 JavaScriptの関数を極める P22~P23,P26~P27


ytkg

Written by ytkg, Twitter, GitHub