在JavaScript中,你可以创建一个这样的函数:
function Cat(children) {
this.children = children || 3;
}
它的作用是创建一个Cat
对象,其值为children
,如果你没有在children
函数中传递var mimmi = new Cat();
,它将是与var mimmi = new Cat(undefined);
相同,这意味着mimmi
的默认金额children
为3。
然而,唯一的问题是,如果我输入0
,它将被计为false
,而children
将被设置为3
,当我实际希望将其设置为0
。
制作像这样的功能最优雅的方法是什么,但仍允许使用0?
我并不认为这看起来很好看:
function Cat(children) {
this.children = (typeof this.children == "number") ? children : 3
}
答案 0 :(得分:5)
是的,在ES5中没有优雅的方法可以做到这一点,你绝不应该使用||
作为默认值和原语(字符串,数字,布尔值,空值和未定义),这正是你想到的。< / p>
您使用typeof
的代码几乎是正确的(应检查只有孩子的typeof
)并且是正确的:
function Cat(children) {
this.children = (typeof children === "number") ? children : 3
}
在ES6中,您可以获得默认参数,从而使其更加出色:
function Cat(children = 3) {
this.children = children; // requires a runtime that supports ES6
}
虽然更多的ES6方式是使用class
。
答案 1 :(得分:4)
由于它是您想要的数值,因此可以使用isNaN()
function Cat(children) {
this.children = isNaN(children) ? 3 : children;
}
答案 2 :(得分:0)
我提出了一个解决方案,这对于使用多个函数和变量来说非常有用:
function por(p, d) { // por = parameter or gate
return ((typeof p === "undefined") ? d : p);
}
其中p
是参数,d
是默认值。
在Cat案例中,你可以这样使用:
function Cat(children) {
this.children = por(children, 3);
}
对于“多个函数和变量”,我的意思是当您需要大规模地执行此操作时,例如:
function ABC(a, b, c) {
this.a = por(a, 1);
this.b = por(b, 2);
this.c = por(c, 3);
}
而不是:
function ABC(a, b, c) {
this.a = ((typeof a === "undefined") ? 1 : a);
this.b = ((typeof b === "undefined") ? 2 : b);
this.c = ((typeof c === "undefined") ? 3 : c);
}
答案 3 :(得分:0)
如您所知,0是布尔值。您应该检查未定义的值。
尝试:
var Cat = function(children) {
this.children = (children === undefined) ? 3 : children;
};
&#13;