JavaScript - 为什么我无法传递默认参数?

JavaScript - Why i'm not able to pass a default parameter?

提问人:Luca 提问时间:11/30/2022 最后编辑:Luca 更新时间:11/30/2022 访问量:45

问:

<body>
    <h1>Insert here:</h1>
    <button>Try</button>
    <input name='myName' type="text">
    <h2>No one here</h2>
    
    <script>
        let button = document.querySelector('button');
        let h2 = document.querySelector('h2');
        let myName = document.querySelector('input');
        
        function sayHi(name = 'Stranger'){
            h2.innerHTML = `Hello ${name}`;
        }
        
        button.addEventListener('click', ()=>{
            sayHi(myName.value);
        });
    </script>

</body>

所以,我最近开始使用 JS,我正在尝试简单的函数,只是为了练习。这段代码基本上应该采用你写的任何内容并打印“hello (whatyouwrite)”,或者如果你什么都不写,就直接打印“hello Stranger”。但是,我无法设法使用默认参数,当我什么都不写并按下按钮时,它会打印“Hello”,并在 hello 之后出现空白。我意识到我发送的“什么都没有”仍然是一些东西,但我无法弄清楚它是什么或如何正确地做到这一点。

最后,我一直在遵循以下教程:https://youtu.be/WyC678zya3E?list=PLP5MAKLy8lP9FUx06-avV66mS8LXz7_Bb&t=489 编写完全相同的代码,对他来说,它可以正常工作......

JavaScript 函数 默认参数

评论

4赞 Konrad 11/30/2022
因为您将空字符串作为参数传递。默认参数仅适用于""undefined
1赞 VLAZ 11/30/2022
仅当未为默认参数传递任何内容传递 .输入中的空值是 - 空字符串。不。是否需要使用默认参数?然后你需要传入而不是.如果只想提供回退值,则可以替换回退值。undefined""undefinedundefined""""
1赞 epascarello 11/30/2022
sayHi(myName.value || undefined);h2.innerHTML = `Hello ${name || 'Stranger'}`;
0赞 freedomn-m 11/30/2022
或者,不要使用“默认参数”:function sayHi(name) { name ||= "Stranger;
0赞 Ben Aston 11/30/2022
您是在两个系统(Web 和 JavaScript)之间的边界上编程的。Web 指定空文本字段的值为空字符串。考虑到默认参数的行为,这实际上有点不方便,但是:两个系统。

答:

1赞 user19955356 11/30/2022 #1
      button.addEventListener('click', ()=>{
          sayHi(myName.value);
          sayHi();//this will invoke default parameter
      });

请改为执行此操作

function sayHi(name){
        if (name.length === 0)
            name = 'Stranger';
          h2.innerHTML = `Hello ${name}`;
      }
      
0赞 bar_ok 11/30/2022 #2

这是因为 myName.value 将一个空字符串传递给 sayHi 函数。你可以在回调中为事件监听器添加一个 if 条件,以检查 myName.value 是否为空字符串,如下所示。

button.addEventListener("click", () => {
  if (myName.value) {
    sayHi(myName.value);
  } else {
    sayHi();
  }
});

或者,如果您想更简洁,请使用三元运算符。