基于Javascript中的类型对函数输入进行排序的最佳方法是什么?

时间:2013-04-08 20:12:56

标签: javascript jquery

我有一个带有几个输入的函数,我想在调用函数时是可选的。每个输入都是不同的类型,例如字符串,数组或数字。使用这样的代码:

function doStuff(str, arr, num){
    if typeof(str) != 'undefined' { $('#stringDiv').text(str)}

    if typeof(arr) != 'undefined' {
        for(var i=0; i < arr.length; i++){
            $('<li>').text(arr[i]).appendTo('#arrayUl')
        }
    }

    if typeof(num) != 'undefined' { $('#numberDiv').text(num)}
}

jQuery(document).ready(function() {
    doStuff("i'm a string", [1,2,3,4,5], 7)
})

我可以说明我的论点可能是可选的,但不是因为如果我缺少arr,那么我的数字参数(num)将成为第二,而不是第三

为了解决这个问题,我还可以将输入转储到数组中,然后对数组进行排序并查找每种类型的数据,就像我在this fiddle.中所做的那样。这看起来很草率,而且基于我见过在他们的函数中执行此操作的库的数量,似乎可能有更好的方法。有一个更好的方法吗?或者循环参数和寻找类型我最好的选择?

3 个答案:

答案 0 :(得分:0)

使用对象

function doStuff(args) {
    // Do something with args.num
    if (typeof args.num !== "undefined") { ... }
    // Same for arr and str
}

答案 1 :(得分:0)

您可以取消所有参数并使用arguments列表查看传递的内容。

但是,更好的方法是创建一个这样的对象:

{
    str: "i'm a string",
    arr: [1, 2, 3, 4],
    num: 3.14
}

然后检查对象是否有这些键:

function doStuff(args):
    if ('str' in args) {
        $('#stringDiv').text(args.str);
    }

答案 2 :(得分:0)

  

或者循环参数和寻找类型我最好的选择?

是的,这完全没问题。无需对它们进行排序。此外,您可以使用类似于数组的arguments object,因此您无需从固定数量的参数手动构建args数组。

function doStuff() {
    for (var i=0; i<arguments.length; i++) {
        var a = arguments[i];
        if (typeof a == 'string')
            $('#stringDiv').text(str);
        else if (Array.isArray(a)) // or check typeof a == 'object'
            for(var j=0; j < a.length; j++)
                $('<li>').text(a[j]).appendTo('#arrayUl');
        else if (typeof a == 'number')
            $('#numberDiv').text(num);
    }
}