[解決済み] JavaScriptの関数に可変数の引数を送ることは可能ですか?
質問
JavaScriptの関数に、配列から可変数の引数を送ることは可能ですか?
var arr = ['a','b','c']
var func = function()
{
// debug
alert(arguments.length);
//
for(arg in arguments)
alert(arg);
}
func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d'
func(arr); // prints 1, then 'Array'
最近Pythonをたくさん書いていますが、varargsを受け取ってそれを送信できるのは素晴らしいパターンです。例えば
def func(*args):
print len(args)
for i in args:
print i
func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d'
func(*arr) // prints 4 which is what I want, then 'a','b','c','d'
JavaScriptで配列を送信して、その配列を処理することは可能ですか? として 引数の配列は?
解決方法は?
更新情報 : ES6 からは、単純に 拡散構文 関数を呼び出すときに
func(...arr);
ES6では、引数を配列として扱うことを想定している場合もあるので、例えば、パラメータリストでspread構文を使うことも可能です。
function func(...args) {
args.forEach(arg => console.log(arg))
}
const values = ['a', 'b', 'c']
func(...values)
func(1, 2, 3)
また、最初の2つの引数を別々に受け取り、残りを配列として受け取りたい場合など、通常のパラメータと組み合わせることも可能です。
function func(first, second, ...theRest) {
//...
}
そして、関数が期待する引数の数を知ることができるのは、あなたにとって便利なことかもしれません。
var test = function (one, two, three) {};
test.length == 3;
でも、とにかく任意の数の引数を渡すことができる...。
スプレッド構文は、以下の構文より短く、よりスイートです。
apply
を設定する必要がない場合、また
this
の値を関数呼び出しの中で使用する場合は、この方法を使用します。
以下は 適用 の例ですが、これは以前のやり方です。
var arr = ['a','b','c'];
function func() {
console.log(this); // 'test'
console.log(arguments.length); // 3
for(var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
};
func.apply('test', arr);
現在では、私は
apply
配列から任意の数の引数を渡す必要がある場合のみです。
と
を設定します。
this
の値を指定します。
apply
が取るのは
this
の値を最初の引数として、関数呼び出し時に使用します。
null
を使用すると、非制限的なコードで
this
の中のグローバルオブジェクト (ウィンドウ) を参照します。
func
また、'use strict' を明示的に使用した場合や、ESモジュールでは、ストリクトモードで使用します。
null
が使用されます。
また
arguments
オブジェクトは実際にはArrayではないので、次のように変換します。
var argsArray = Array.prototype.slice.call(arguments);
そしてES6では
const argsArray = [...arguments] // or Array.from(arguments)
しかし
arguments
オブジェクトを直接使用できるようになりました。
関連
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] JavaScriptで変数が文字列かどうかをチェックする
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] JavaScriptで変数が存在するか(定義されているか/初期化されているか)をチェックする
-
[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?
-
[解決済み] JavaScriptでオブジェクトのキー/プロパティの数を効率的にカウントする方法
-
[解決済み] JavaScriptの関数への引数の数
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
JavaScriptの関数この指摘の問題を説明
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
vueの補間表現とv-textディレクティブの違いについて
-
vueにおけるfilterの適用シーンについて解説します。
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules