You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS中if语句(null判断)与innerHTML属性修改异常问题求助

搞定你的if/else分支问题!

嘿,我看了你的代码,发现问题出在判断逻辑没覆盖所有空值场景上——这就是为啥你觉得两种分支没正常执行的原因!

问题根源

你的if条件只检查了name === null(也就是用户点击prompt弹窗的「取消」按钮时的情况),但如果用户点击「确定」却啥也没输入,这时候name的值是空字符串"",并不会触发第一个分支,反而会走到else里,显示Hello . Hope you are having an awesome day!这种奇怪的内容,看起来就像段落没被正确修改一样。

修正方案

我们只需要把判断条件改成同时处理null和空字符串的情况就行,最简单的写法是用if (!name)(因为null和空字符串在JS里都是“假值”),当然你也可以写得更明确:name === null || name === ""。

另外我还帮你优化了一些代码细节,让它更符合现代JS的写法,也更易读:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Time to practice: Adding elements with Javascript</title>
</head>
<body>
    <main></main>
    <script>
        // 修正body样式,用vh代替vw避免横向滚动,去掉默认margin
        document.body.style.cssText = 'height: 100vh; width: 100vw; margin: 0;';
        // 直接获取main元素,而不是赋值成style字符串
        const main = document.querySelector('main');
        main.style.cssText = 'background-color: white; height: 100vh; width: 100vw; display: flex; align-items: center; justify-content: center;';
        
        const style = document.createElement('style');
        style.innerHTML = `
            #mainP {
                font-size: 40px;
                text-align: center;
                padding: 0 20px;
            }
        `;
        document.head.appendChild(style);
        
        const name = prompt("What's your name?");
        const newP = document.createElement('p');
        newP.setAttribute('id', 'mainP');
        main.appendChild(newP);
        
        console.log(name);
        // 现在能同时处理取消(null)和空输入("")的情况了
        if (!name) {
            newP.innerHTML = "I didn't even want to know your name anyway!";
        } else {
            // 用模板字符串代替拼接,更清爽
            newP.innerHTML = `Hello ${name}! Hope you are having an awesome day!`;
        }
    </script>
</body>
</html>

额外的小优化说明

  • 把var换成了const:现代JS更推荐用这个,能避免意外的变量重赋值,代码更安全。
  • 调整了布局:给main加了flex布局,让文本居中显示,字体大小也调小了一点,避免在小屏幕上溢出。
  • 替换了字符串拼接:用${name}这种模板字符串写法,比'Hello ' + name + '.'可读性高多了。

现在你再测试一下:不管是点取消,还是啥也不输入就点确定,都会显示第一个分支的文本;输入名字后则会正常显示问候语,两种分支都能正常工作啦!

内容的提问来源于stack exchange,提问作者Drew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:17:38