4

私は最近、プログラミングのバックグラウンドのすべての骨に反するいくつかの JavaScript で問題を抱えていました。Javascript はこれを頻繁に行うので、それほど驚くことではありません。

私はそのような機能を持っています...

function x(param1, booleanParam, arrayParam){
    ....
}

arrayParam.length定義されていないという実行時エラーが発生しました。デバッグ時にこれが真実であることがわかり、その理由を調べに行きました。関数呼び出しでカンマを忘れていたことが判明しました...

x(param1, true [arrayJunk]);

私が抱えている問題は、なぜこの呼び出しが行われたのかを理解することですか? なぜこれはコンパイル エラーではないのですか? Javascript はどのようにこれを見て、「ああ、うまくいくようだ!」と考えますか?

あなたが共有できる啓発を前もって感謝します!

4

4 に答える 4

3

それが索引付け式です。
と同じ構文someArray[someIndex]です。

ブール値プリミティブのプロパティの名前でundefinedない限り、2 番目のパラメーターとしても渡されます。arrayJunk

于 2012-06-04T16:40:24.213 に答える
2

何が起こるかは次のとおりです。

  • JavaScript エンジンがオブジェクトに変換trueされBooleanます (プリミティブではありません)
  • arrayParam次に、そのオブジェクトから格納されているプロパティ名にアクセスしようとします
  • プロパティが存在しないため、未定義を返します

arrayParamstring の場合"toString"、関数オブジェクトを返します

于 2012-06-04T16:44:24.263 に答える
0

この場合、式はインデックスとして解釈されていました。と本質的に同じ

someArray[42]

そのため、3 つではなく 2 つのパラメーターを使用した関数呼び出しと見なされていました。

于 2012-06-04T16:41:37.043 に答える
0

多くの動的言語は、関数に渡す引数が多すぎるか少なすぎるかをチェックしません。

これによりエラーが隠されることがありますが、独自のデフォルト パラメータ スキームをロールすることもできます。

于 2012-06-04T16:44:26.330 に答える