通过逻辑运算符 OR 分配默认值

Posted

技术标签:

【中文标题】通过逻辑运算符 OR 分配默认值【英文标题】:Assigning a default value through the logical operator OR 【发布时间】:2011-12-30 16:59:28 【问题描述】:

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

所以在这个例子中:

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

</script>

如果传递给函数的参数value被视为false,如整数0或空字符串"" 然后 this.value 将被设置为 (value not given) 这不是 true 正确的(因为我们确实在传递一个值)。

所以问题是设置 this.value 的最佳方法是什么?

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

【问题讨论】:

我没有得到你的问题。 "(value not given)" 强制转换为 true 请解释一下您所说的“this.value 将被设置为(value not given)不是 true”是什么意思。 @aadit-m-shah (value not given) 是当参数 value 被视为 false 时要分配的默认值。这个问题没有错误。 【参考方案1】:

带有||的scheme写起来最方便,但它只能用于假值(undefinednull0""falseNaN ) 不是合法值。 (当您只想处理nullundefined 时,可以使用in this proposal 描述并包含在ES2020 中的新空值合并运算符(??)。)

如果您想允许特定的虚假值而不允许其他值,那么您必须编写更具体的代码来处理您的特定情况。例如,如果您想允许空字符串,但不允许 null 或 undefined 或其他虚假值,那么您必须编写更具体的代码,如下所示:

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;

【讨论】:

您的语法错误。您的 if 语句应如下所示:if (value || value === ""). @AaditMShah - 更正了错字。 您的第一句话很有道理。我同意你的看法。 ||运算符在某些情况下不可用。好的答案,谢谢! 你不需要虚假值列表中的“等...”,你把它们都列出来了。 @Julian - 我删除了“等...”。【参考方案2】:

这取决于您要排除的值。如果“一般错误值”的类别过于宽泛,您可以更明确:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:
<script language="javascript">
function test (value)
    this.value = arguments.length > 0 ? value : "(value not given)";

</script>

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

【讨论】:

【参考方案5】:

正确的做法是:

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

可能重复的问题。 谷歌一下。

【讨论】:

【参考方案6】:

今天取决于您的应用程序关心的browser support,您可能希望改用default parameters:

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

这与今天有关,自 2011 年以来问题和答案日期也没有更新,所以我认为它可能会有所帮助。

【讨论】:

以上是关于通过逻辑运算符 OR 分配默认值的主要内容,如果未能解决你的问题,请参考以下文章

计算机vb: 逻辑型数据只有两个值:0和1。 答案: 错误 应该是啥???

python-逻辑运算和布尔值

数字图像处理的数学变换逻辑运算

25.Python逻辑运算符及其用法

Go 数据类型(三)整型及运算符

C#中通过逻辑^(异或)运算交换两个值隐藏的巨坑!!!