允许具有多种数据类型的 Javascript 参数 : good practice or not?

标签 javascript jquery function types arguments

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

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

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

因为另一方面,没有明确说明函数是什么类型,据我所知,JIT 编译器无法高效工作。并且通常必须进行某种类型的类型强制转换,这会带来额外的性能损失。

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

最佳答案

JavaScript 是松散类型的。如果您不小心,这可能会伤害您,但它也提供了极大的灵 active 来精确地执行此操作。我经常利用这种行为;在函数中,您通常希望具有如下结构:

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
};

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

编辑:小心 Array:typeof someArray 将给出 "object",您需要改用它:someArray instanceof Array http://jsfiddle.net/8ycFb/

关于允许具有多种数据类型的 Javascript 参数 : good practice or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197152/

相关文章:

javascript - 需要javascript代码的解释

javascript - AngularJS Controller 不从服务更新模型

javascript - 为什么这个对象字面量会导致语法错误?

javascript - 长列表项创建不需要的缩进

list - 删除列表中的重复对

mysql - 简单的mysql函数帮助: how to store a function, 用它来操作数据和写入数据到新表

C++:指向不同函数的成员函数指针数组

javascript - 在移动 Safari 中检测 iOS5(首选 javascript)

javascript - JQuery - 每次点击表格都会改变单元格宽度

javascript - 是否有理由在任何等效的 jQuery 函数上使用 insertAdjacentHTML() ?