提问人:Luca 提问时间:11/30/2022 最后编辑:Luca 更新时间:11/30/2022 访问量:45
JavaScript - 为什么我无法传递默认参数?
JavaScript - Why i'm not able to pass a default parameter?
问:
<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 编写完全相同的代码,对他来说,它可以正常工作......
答:
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();
}
});
或者,如果您想更简洁,请使用三元运算符。
评论
""
undefined
undefined
""
undefined
undefined
""
""
sayHi(myName.value || undefined);
或h2.innerHTML = `Hello ${name || 'Stranger'}`;
function sayHi(name) { name ||= "Stranger;