0与||操作者

时间:2015-03-06 15:01:15

标签: javascript

在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
}

4 个答案:

答案 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是布尔值。您应该检查未定义的值。

尝试:

&#13;
&#13;
var Cat = function(children) {
	this.children = (children === undefined) ? 3 : children;
};
&#13;
&#13;
&#13;