【问题标题】:Assigning a default value through the logical operator OR通过逻辑运算符 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 时要分配的默认值。这个问题没有错误。

标签: javascript function default-value


【解决方案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 年以来问题和答案日期也没有更新,所以我认为它可能会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-02
            • 1970-01-01
            相关资源
            最近更新 更多