【问题标题】:Default array displaying undefined value显示未定义值的默认数组
【发布时间】:2020-04-03 18:02:41
【问题描述】:

以下 Javascript 函数在应该显示实际值时显示 undefined 值:

<script>
    function addArrayNew(a = [101], c) {
        document.write('A: ' + a[0] + '<br>');
        document.write('B: ' + a + '<br>');
        document.write('C: ' + c + '<br>');
    }

    addArrayNew(110);
</script>

实际输出:

A: undefined
B: 110
C: undefined

预期输出:

A: 101
B: 101
C: 110

【问题讨论】:

    标签: javascript arrays node.js


    【解决方案1】:

    这是因为addArrayNew 的函数描述将a 作为第一个参数,c 作为第二个参数。因此,无论您最初为addArrayNew(110) 传递的值如何,都将仅设置为a,如果您传递addArrayNew(110, 100),则将设置为第一个,然后是c。如果您只想发送第二个参数并希望将a 设置为默认值,那么您可以传递undefined,例如:

    function addArrayNew(a = [101], c) {
      document.write('A: ' + a[0] + '<br>');
      document.write('B: ' + a + '<br>');
      document.write('C: ' + c + '<br>');
    }
    
    addArrayNew(undefined, 110);

    通过传递undefined,我们实际上是在强制a 使用默认值。但好的做法是始终将可选参数放在最后,以便默认情况下将它们设置为undefined,例如:

    function addArrayNew(c, a = [101]) {
      document.write('A: ' + a[0] + '<br>');
      document.write('B: ' + a + '<br>');
      document.write('C: ' + c + '<br>');
    }
    
    addArrayNew(110);

    在这里,使用addArrayNew(110)addArrayNew(110, undefined) 会得到相同的结果。但是,当您将有大量参数用于类似以下的函数时,您终于可以真正理解使用默认值的重要性:

    function addArrayNew(a, b=1, c=2, d=3, e=4, f=5) {
      document.write(`${a} - ${b} - ${c} - ${d} - ${e} - ${f}`);
    }
    
    addArrayNew(110);

    正如您在最后放置可选值所看到的那样,如果a 最终出现,我们只有调用像addArrayNew(110) 这样的函数而不是调用addArrayNew(undefined,undefined,undefined,undefined,undefined, 110)

    【讨论】:

      【解决方案2】:

      在您的示例中,110 作为第一个(也是唯一一个)参数传递,因此它会覆盖 a insted of c(将变为 undefined)。最好将可选参数放在最后,然后您可以将更多或更少的参数传递给您的函数:

      <script>
          function addArrayNew(c, a = [101]) {
              document.write('A: ' + a[0] + '<br>');
              document.write('B: ' + a + '<br>');
              document.write('C: ' + c + '<br>');
          }
      
          addArrayNew(110);
      </script>

      【讨论】:

      • 但是B: 110怎么会显示在实际输出中呢?它应该是B: undefined
      • a.toString() 在单元素数组上将返回唯一值
      • "那么 B: 110 怎么会显示在实际输出中?应该是 B: undefined" 因为你已经将a 传递为110 是一个数字因此110 显示为b,但由于a 是一个数字,它不是一个数组,因此a[0] 是未定义的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2020-08-16
      • 2017-09-27
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多