通过逻辑运算符OR指定默认值

Assigning a default value through the logical operator OR

本文关键字:默认值 OR 逻辑运算符      更新时间:2023-09-26

我们知道,如果第一个操作数为true,javascript逻辑运算符||将生成其第一个操作数值。否则,它将生成第二个操作数的值。

所以在这个例子中:

<script language="javascript">
function test (value){
    this.value = value || "(value not given)";
}
</script>

如果传递给函数的参数被视为false,就像整数0或空字符串">一样,那么this.value将被设置为(未给定的值(这不是true正确的(因为我们确实在传递值(。

所以问题是,设置this.value的最佳方式应该是哪一种?

编辑:所有4个第一个答案都使用三元运算符"?"。我的问题是关于"||"运算符。

带有||的方案最便于编写,但只能在伪值(undefinednull0""falseNaN(不是合法值时使用。(当你只想处理nullundefined时,你可以使用本提案中描述的并包含在ES2020中的新零合并算子(??(。(

如果你想允许特定的false值而不允许其他值,那么你必须编写更具体的代码来处理你的特定情况。例如,如果你想允许一个空字符串,但不允许null或未定义或其他虚假值,那么你就必须编写更具体的代码,比如:

function test(value) {
    if (value || value === "") {
        this.value = value;
    } else {
        this.value = "(value not given)";
    }
}

或者,如果你只想排除undefined,你可以专门测试它:

function test(value) {
    if (value === undefined) {
        value = "(value not given)";
    }
    this.value = value;
}

这取决于要排除的值。如果"一般错误值"在一个类别中过于宽泛,你可以更明确:

function test(value) {
    this.value = value !== undefined ? value : "(value not given)";
}

如果您希望能够分配false值,请执行此操作。

this.value = (typeof value !== 'undefined') ? value : 'value not given';

这将保留false''0等值,但在实际未将该值作为参数传递时将使用默认值。

<script language="javascript">
function test (value){
    this.value = arguments.length > 0 ? value : "(value not given)";
}
</script>

您可以通过检查函数参数数组的长度来检查该参数是否已传入。

正确的方法是:

this.value = (typeof value == 'undefined') ? 'my argument' : value;

可能是重复的问题。谷歌搜索。

现在,根据应用程序关心的浏览器支持,您可能需要使用默认参数:

var test = (value = '(value not given)') => {
    this.value = value;
};

这与今天有关,而且自2011年以来,问答日期一直没有更新,所以我认为这可能会有所帮助。