6

很多次我看到——尤其是在 jQuery 中——一个函数可以有多种有效的数据类型,比如说字符串或函数。此外,在我自己的代码中,有时我的函数可以采用一个多个值。所以我可以调用这个函数:

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

这看起来更灵活,打字也更方便,但这真的是一件好事吗?

因为另一方面,它没有明确说明函数是什么类型,并且 AFAIK 然后 JIT 编译器不能有效地工作。并且通常必须有某种类型的类型强制,这可能会带来额外的性能损失。

那么,总是写: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",你需要改用这个:http: someArray instanceof Array //jsfiddle.net/8ycFb/

于 2012-11-02T14:36:53.297 回答