私は1つの関数で2つのパラメータを渡す方法を扱いたいと思います。 1)これは単一のパラメータを渡す標準的な方法であるべきです 2)この配列内の渡されたすべてのパラメータを取得するために配列を破壊する方法でなければなりません。このようなJavascriptは破壊されたパラメータを検出します
何か:
function a (z, c) {
console.log("z => ", z);
console.log("c => ", c);
}
let b = [1,2];
a(...b);
それが正常に動作し、両方のコンソールがログアウトし出力します。しかし、私は1つのパラメータを渡す可能性も持っていたいと思っています。そのような何か:
function a (z, c) {
console.log("z => ", z);
console.log("c => ", c);
}
//now varibale b should contains a number, not an array.
//let b = [1,2];
// how can I detect that here is an one parameter
and I can't use the destructed parameter? How I can do this without changing a function call
let b = 1;
// throws an error
a(...b);
実際の消滅の場合ので、私は消滅演算子は、いくつかの変数に結果割り当て、それが経由typeof演算などを入力しますテストすることはできません - それは不可能です。
P.S. Destruct演算子は配列のみで動作し、Numberには適用できないことはわかっています。しかし、これは単なる例です。
私は関数に1つのパラメータ(数値のような)を渡すか、そのパラメータが配列であることを検出し、すべての配列項目をフェッチして標準の関数呼び出し複数のパラメータ
myFunc(1,2,3,4)
多分誰かが私を助けることができますか?あらゆる情報をありがとう。
UPDATE:
型チェックならば、私はシンプルな使用することができますが、私はそれがものになるかどうか、正しいか分からない醜いソリューション好きなように。
function a (z, c) {
console.log("z => ", z);
console.log("c => ", c);
}
let b = 1;
if (~Object.prototype.toString.call(b).indexOf("Array")) {
a(...b);
} else {
a(b);
}
単に「a(b)」ではないのはなぜですか? – Cristy
'a(b)'を呼び出して、bが関数内の配列であるかどうか確認できませんか? – James
私の場合、残念ながら、そうではありません。パラメータのタイプについて知っているべきではない関数にしてください。通常の呼び出しの場合と同様に正常に動作するはずです。 (既存のコードを多く使用するユーティリティを開発したいので、これは非常に重要です)。したがって、関数がA、B、Cを最終的にとるべきならば、配列ではなくA、B、Cを直接受け取るべきです。 – Velidan