js函数中的默认参数

时间:2012-10-16 07:43:20

标签: javascript function

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

  1. 这很好

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

    function(a, b) {
        a = a || 'default_val';
        b = b || 'default_val';
    }
    

    如果你传递假,那就打破了逻辑。所以这应该被标记为坏习惯

  3. 有几个问题,但我从未见过这个问题的答案(没有人直接回答这个问题):这是(最后一种方法)好​​吗(有没有人看到它的任何问题)?

    function(a = 'default_val', b = 'default_val') {
        // your code
    }
    
  4. 我已经测试了第3种方法,但未发现任何问题。我想要最后一种方法。它更干净,看起来更像是其他语言的结构。

    由于

2 个答案:

答案 0 :(得分:2)

在当前的ECMAScript实现中,没有办法像3那样做。 我也非常希望这样。 它在下一个实施中提出了所谓的“和谐”,更多关于它的内容 http://wiki.ecmascript.org/doku.php?id=harmony:parameter_default_values

我脑子里还想到了我实际上是怎么做到的。通常我将参数作为对象传递,例如,

  

var options = {x:20,y:30}

然后我正在执行函数

function iAcceptDefaults(options) {
    var defaults = {
        x: 40 
    }
    var newParameters = $.extend({},options, defaults) // here we using jQuery method extend to mix defaults parameters with options

}

答案 1 :(得分:1)

在大多数现代浏览器中,第三个示例在语法上是不正确的。目前它仅适用于FireFox(此处为固定issue),因为此语法是尚未批准的ECMAScript Harmony standard的一部分。