通过逻辑运算符 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写起来最方便,但它只能用于假值(undefined
、null
、0
、""
、false
、NaN
) 不是合法值。 (当您只想处理null
和undefined
时,可以使用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 分配默认值的主要内容,如果未能解决你的问题,请参考以下文章