4

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

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

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

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

    function(a = 'default_val', b = 'default_val') {
        // your code
    }
    

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

谢谢

4

2 回答 2

2

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

我也想到了我实际上是如何做的。例如,通常我将参数作为对象传递,

var 选项 = { 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

}
于 2012-10-16T07:48:25.357 回答
1

在大多数现代浏览器中,第三个示例在语法上是不正确的。目前它只能在 FireFox 中工作(这是一个固定的问题),因为这种语法是尚未批准的ECMAScript Harmony 标准的一部分。

于 2012-10-16T07:52:19.083 回答