Javascript js函数中的默认参数

Javascript js函数中的默认参数,javascript,function,Javascript,Function,我在这里读到了一些关于这方面的问题: 这很好 function(a, b) { a = (typeof a === 'undefined')? 'default_val' : a; b = (typeof b === 'undefined')? 'default_val' : b; } 这有点麻烦(适用于除布尔值以外的任何值) 如果你通过false,它就会破坏逻辑。所以这应该被标记为一个坏习惯 有几个问题,但我从来没有看到这个问题的答案(没有人直接回答这个问题):这(最后一种

我在这里读到了一些关于这方面的问题:

  • 这很好

    function(a, b) {
        a = (typeof a === 'undefined')? 'default_val' : a;
        b = (typeof b === 'undefined')? 'default_val' : b;
    }
    
  • 这有点麻烦(适用于除布尔值以外的任何值)

    如果你通过false,它就会破坏逻辑。所以这应该被标记为一个坏习惯

  • 有几个问题,但我从来没有看到这个问题的答案(没有人直接回答这个问题):这(最后一种方法)好吗(有人看到它有什么问题吗)

  • 我已经测试了第三种方法,但没有发现任何问题。我想要最后一种方法。它更干净,看起来更像其他语言的结构


    谢谢

    在当前的ECMAScript实现中,没有像3这样的方法。 我也真的希望如此。 它在下一个实现中提出了所谓的“和谐”,这里更多地介绍它

    我的脑海里也浮现出我是怎么做的。通常我把一个参数作为一个对象传递,例如

    变量选项={x:20,y:30}

    然后我在函数中做


    在大多数现代浏览器中,第三个示例在语法上是不正确的。目前它只能在FireFox中使用(这里是一个固定的),因为此语法是尚未批准的语法的一部分。

    存在问题:您的第三条语句是无效声明,并且您的函数从未定义过。函数(a='default_val',b='default_val')is Syntax errorJavascript不允许为函数参数指定默认值。此外,语法1对于检查也不是完全有效的,因为调用者可以将
    undefined
    值传递到函数中。您必须检查
    参数。length
    才能执行此工作。“对于检查来说不是完全有效的,因为调用方可以传递未定义的”我想是的。但这是最好的方法(不是完美的方法)。当您不知道将有多少个参数时,不能使用arguments.length。@Symba:arguments.length将设置为传入多少个参数。因此,在您的情况下,如果是0,则两个参数都需要设置为默认值,如果是1,则第二个参数需要设置为默认值,任何大于1的参数都不需要指定默认值。这个逻辑可以应用于任意数量的参数。所以你的建议是使用jQuery为JS获取一些语法糖?不太聪明,我同意比约德的观点。使用jQuery方法(或任何其他库)来解决这个问题是不可能的,没有jQuery mate,你很容易就能做到这一点,这只是一个例子,使用google查找$。extend Alternative有什么变化吗?@GamesBrainiac没有什么变化。仍然只有FireFox支持此功能()。我认为ECMAScript Harmony的大部分功能只有在标准完成并发布后才会被浏览器开发人员采用。JS引擎比CSS引擎复杂得多。因此,在不影响性能的情况下引入新的实验特性要困难得多。
    function(a, b) {
        a = a || 'default_val';
        b = b || 'default_val';
    }
    
    function(a = 'default_val', b = 'default_val') {
        // your code
    }
    
    function iAcceptDefaults(options) {
        var defaults = {
            x: 40 
        }
        var newParameters = $.extend({},options, defaults) // here we using jQuery method extend to mix defaults parameters with options
    
    }