2017-04-24 11 views
1

これを聞くには良い方法があるはずですが、私は正確な原因を確信していません。なぜこのスプレッドオペレータはランタイムをクラッシュさせますか?

ここでコードスニペットを最初に解説します。

this.argArr = [['arg1', 'arg2'], ['foo', 'bar'], ['you get ', 'the point']]; 
 

 
this.evalArgsFromArr = function() { 
 
    var out = []; 
 
    for (var _ = 0; _ < parent.argArr.length; _++) { 
 
    out.push(someFunction(...parent.argArr[_])); // This part crashes 
 
    } 
 
    return out; 
 
};

この関数はもちろんのオブジェクトの一部です。

考えられるのは、parent.argArrの各項目は、someFunction()の2つの引数を含む配列でなければならず、人間が読めるように出力を凝縮させる役割も果たしていることです。私の理解は、反復可能なオブジェクト(parent.argArrに格納されている配列など)で使用されると、スプレッド演算子は個々の値を別々に出力します。たとえば、forループの最初の実行ではsomeFunction('arg1', 'arg2')が出力されます。

Node.jsまたはPHPでこれを含むファイルを実行すると、ランタイムはすぐにクラッシュしますが、まだ呼び出されていなくても、オペレーター[...]が予期しない。 、「...」 Error Message

+0

実行可能な例を提供できますか? –

+0

node.jsのどのバージョンがありますか? – Vovan

答えて

-1

をあなたが削除する必要があります試してください:ここで

は、エラーメッセージは、それは場合に役立ちます、だ

this.argArr = [['arg1', 'arg2'], ['foo', 'bar'], ['you get ', 'the point']]; 

this.evalArgsFromArr = function() { 
    var out = []; 
    for (var _ = 0; _ < parent.argArr.length; _++) { 
    out.push(someFunction(parent.argArr[_])); 
    } 
    return out; 
}; 
+0

配列要素を個々の関数引数にどのように入れて、 '...'を削除するのでしょうか? – rsp

+1

私は「あなたは削除しなければならない」と言っているように感じます。「...」は、最悪の場合はむしろ役に立たず、最悪の場合は間違っています。特に、書く方法では、個々の引数としてのコンポーネントではなく、配列全体を単一の引数として渡します。これがまさに私が最初に普及した演算子を使う理由です。 – Papayaman1000

4

私は、これは変数名としてアンダースコア使用するための罰だと思います。しかし真剣に、あなたのコードを見ると、それがうまくいくように思えますが、あなたのNodeインタプリタがそれをサポートするのに十分なだけ新しい場合に限ります。

が見る、ノードのバージョンでスプレッドオペレータのサポートを確認するには:

がネイティブでサポートされていないプラットフォーム上で近代的な構文を使用するには、バベルを使用します。

実行可能な例を提供していないので、もちろんテストすることはできません。

しかし、あなたはこの答えを見ることができます:

、あなたがそこに例を実行できるかどうかを確認。スプレッド演算子を使用し、正常に動作することがテストされている場合。あなたのシステム上で実行されている場合は、スプレッド演算子を使用できるはずです。そうでない場合は、Nodeをアップグレードしてください。古いバージョンを使用する理由がないからです。他のすべては、あなたが常に変更することができるはず失敗した場合

someFunction(...array); 

へ:

someFunction.apply(undefined, array); 

のドキュメントを参照してください:

ちなみに、私はあなたが1本のラインが「クラッシュするのが好き」と言って何を意味するのかは分かりません。いつもクラッシュしませんか?それは非常に奇妙なことでしょう。

+0

私はノード7.8.0を実行していますので、それは動作します... hm。私は、 'apply'を避けたいと思っています。なぜなら、コードにかなりぎこちない影響を与える傾向があるからです。 – Papayaman1000

+0

@ Papayaman1000ノード7.8.0で動作するはずです。実行可能なサンプルを提供した場合、誰かが間違ったことを教えてくれるかもしれません。質問のスニペットを実行してエラーを再現することはできません。 – rsp

+0

ファイル全体のダンプ以外の何を提供するのか分かりません。それは適切/有用でしょうか? – Papayaman1000

関連する問題