允许多种数据类型的Javascript参数:良好实践与否?

时间:2012-11-02 14:25:11

标签: javascript jquery function types arguments

我经常看到 - 特别是在jQuery中 - 一个函数可以有多个有效的数据类型,比如一个字符串或一个函数。另外,在我自己的代码中,我有时会有一些函数可以使用一个几个值。所以我可以用以下函数调用该函数:

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

这似乎更灵活,也更方便打字,但这实际上是一件好事吗?

因为另一方面,没有明确说明函数的类型,而AFAIK则JIT编译器无法有效地工作。并且通常必须存在某种类型的类型强制,这可能会带来额外的性能损失。

那么,即使在数组中只有一个对象,始终写:myFunc(["arg"])会更好吗?你对此有何看法?

1 个答案:

答案 0 :(得分: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
};

您的功能将变得更加灵活,更容易消费,但代价是变得更加复杂。灵活性的复杂性交换是否值得,因情况而异(以及人与人之间)。

修改:谨慎使用Arraytypeof someArray会提供"object",您需要使用此代码:someArray instanceof Array http://jsfiddle.net/8ycFb/