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

fro*_*dev 6 javascript jquery types arguments function

很多次我看到 - 特别是在jQuery中 - 一个函数可以有多个有效的数据类型,比方说一个字符串或一个函数.此外,在我自己的代码中,我有时会有一些函数可以采用一个多个值.所以我可以调用函数:

myFunc("arg"); or myFunc(["arg1", "arg2", ...]);
Run Code Online (Sandbox Code Playgroud)

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

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

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

jba*_*bey 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
};
Run Code Online (Sandbox Code Playgroud)

您的功能将变得更加灵活且更易于使用,但代价是变得更加复杂。以复杂性换取灵活性是否值得因情况(以及因人而异)而有所不同。

编辑:小心Array: typeof someArraywill Give "object",您需要使用它: http: someArray instanceof Array //jsfiddle.net/8ycFb/