我在这里读到了一些关于此的问题:
这很好
function(a, b) {
a = (typeof a === 'undefined')? 'default_val' : a;
b = (typeof b === 'undefined')? 'default_val' : b;
}
这有点麻烦(适用于除布尔值之外的任何东西)
function(a, b) {
a = a || 'default_val';
b = b || 'default_val';
}
如果你传递假,那就打破了逻辑。所以这应该被标记为坏习惯
有几个问题,但我从未见过这个问题的答案(没有人直接回答这个问题):这是(最后一种方法)好吗(有没有人看到它的任何问题)?
function(a = 'default_val', b = 'default_val') {
// your code
}
我已经测试了第3种方法,但未发现任何问题。我想要最后一种方法。它更干净,看起来更像是其他语言的结构。
由于
答案 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的一部分。