[JavaScript] arguments をサクッと配列に変換する方法

phi phi on javascript

だれもが一度はひっかかったことがあるであろうこれ

var hoge = function() {  
    var str = arguments.join(',');
    console.log(str);
};

hoge('a', 'b', 'c');  

実際に runstant で動かすと join は関数じゃないよ って エラーがでているのがわかるかと思います.

[runstant]

これは arugments は配列っぽいけど配列ではない為, 配列系のメソッドが使えずに起きるエラーです.

ただ arguments に配列のメソッドを適応したいって場面はよくあると思うので その解決方法を紹介します.

arguments を Array に変換

Array.prototype.slice.call に arguments を渡すことで 配列に変換することができます.

var hoge = function() {  
    var args = Array.prototype.slice.call(arguments);
    var str = args.join(',');
    console.log(str);
};

hoge('a', 'b', 'c');  

[runstant]

console に 'a,b,c' と表示されているのがわかるかと思います.

apply を使う

特定のメソッドのみ使いたい場合はこっちの方が良いかもです.

var hoge = function() {  
    var str = Array.prototype.join.apply(arguments);
    console.log(str);
};

hoge('a', 'b', 'c');  

[runstant]