6

特にjQueryで、関数が複数の有効なデータ型、たとえば文字列または関数のいずれかを持つことができることを何度も見てきました。また、私自身のコードには、1 つまたは複数の値を取ることができる関数がある場合があります。したがって、次のように関数を呼び出すことができます。

myFunc("arg"); or myFunc(["arg1", "arg2", ...]);

これはより柔軟で、より入力しやすいように見えますが、これは実際に良いことなのでしょうか?

一方、関数の型が明示されておらず、知る限り、JITコンパイラは効率的に機能しないためです。そして、多くの場合、何らかの型の型強制が必要になり、パフォーマンスがさらに低下する可能性があります。

では、配列にオブジェクトが 1 つしかない場合でも、常に次のように記述したほうがよいでしょうか? myFunc(["arg"])これについてどう思いますか?

4

1 に答える 1

2

JavaScript はゆるく型付けされています。注意しないと、これはあなたを苦しめる可能性がありますが、このように正確に行うための優れた柔軟性も提供します。私はこの振る舞いをよく利用します。関数では、通常、次のような構造が必要になります。

var func = function(someArg) {
    var data;

    switch (typeof someArg) {
        case 'string':
            // transform someArg into data
            // example: pass it as a jquery selector to get a jquery object
            break;
        case 'object':
            // transform someArg into data
            break;
        ...
        default:
            throw new Error('Invalid argument type passed to func!');
    }

    // rest of function that expects data to be a certain type
};

関数はより柔軟になり、より複雑になるという代償を払って使いやすくなります。複雑さと柔軟性を交換する価値があるかどうかは、状況によって (そして人によって) 異なります。

Array編集: : typeof someArraywill giveに注意して"object"ください。代わりにこれを使用する必要があります: someArray instanceof Array http://jsfiddle.net/8ycFb/

于 2012-11-02T14:36:53.297 に答える