【问题标题】:handling on no argument in javascript functions处理 javascript 函数中的无参数
【发布时间】:2013-03-08 00:21:08
【问题描述】:

我在 javascript 方面几乎没有经验,但在其他编程语言中,可以为函数中缺少的参数设置默认值。

比如说我有一个函数

function foo(a , b)
  return a + b 
{

我希望能够用 1 个参数或 2 个参数调用上述函数

一种参数情况:

foo(2)   //a =2 and b would be automatically set to a default no argument value,

两个参数大小写:

foo(1,2)  // a = 1 , b = 2 => 3

这在兼容 IE 8 或使用 Jquery 1.7.2 的 javascript 中是否可行?

【问题讨论】:

    标签: javascript internet-explorer-8 jquery-1.7


    【解决方案1】:

    JavaScript 函数允许您使用比指定更少的参数调用它们。

    您尝试完成的操作可能类似于以下操作:

    function foo(a , b){
      if(typeof b === "undefined"){
          b=3;
      }
      return a + b; 
    }
    foo(5);//return 3;
    

    我强烈建议您检查undefined 并且依赖|| 运算符。我花了几个小时调试做出这种假设的代码,但在传递 0 或另一个虚假值时失败了。 JavaScript 类型系统可能会变得非常棘手,例如 "0" 是虚假的。

    ECMAScript Harmony(下一个版本)允许像其他语言一样使用以下语法的默认参数

    function foo(a , b=3){
      return a + b;
    }
    

    这在 IE8 中不像第一个版本那样工作。

    【讨论】:

    • 这是最好的答案,你是唯一真正检查undefined的人...
    • 是的,确实需要未定义的检查
    • @pyCthon 如果您喜欢我的回答,请考虑接受它,或者告诉我您认为哪些部分不够清楚,以便我改进。
    • @BenjaminGruenbaum 非常清楚,我只是不能接受这个作为答案,在一定的时间限制内,我一直到现在
    【解决方案2】:

    不,但您可以使用三级运算符或 if 语句手动模拟此效果(只需确保检查undefined!):

    function foo(a, b) {
        b = (typeof b === "undefined") ? 2 : b;
    
        return a + b;
    }
    

    【讨论】:

      【解决方案3】:

      是的,这是可能的。如果未传递参数,则会得到一个特殊值“未定义”。以下对我有用:

      function foo(a, b) {
        a = a || defaultForA;
        b = b || defaultForB;
      
      }
      

      由于 Javascript 将转换为布尔值的方式,在上面的代码 sn-p 中,以下都将被视为未定义:

      undefined
      null
      0
      "" (empty string)
      false
      

      因此,如果这些值对您很重要,您需要明确地测试 undefined 而不是上面使用的笼统的“如果不是假”测试。

      【讨论】:

        【解决方案4】:

        一个未定义的参数评估为假,所以你可以在你的函数 foo 的开头做这样的事情:

        a = a || 0;
        b = b || 0;
        

        这样,如果 a 或 b 存在,它们将被评估为自己的值,否则为 0。

        【讨论】:

          【解决方案5】:

          你可以只测试你是否收到了一个参数:

          function foo(a, b) {
            if(typeof b === "undefined") {b = 2;}
          }
          

          通过测试“未定义”,您还可以接受评估为 false 的参数(如 null""0false

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-14
            • 2020-09-18
            • 2016-04-07
            • 1970-01-01
            • 2021-04-10
            • 1970-01-01
            • 2010-12-04
            相关资源
            最近更新 更多