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

使用JavaScript Switch Case统计数组正负值与零的数量,代码运行异常求助

代码问题分析
  • 问题1:switch 语法使用错误
    switch 语句的执行逻辑是:将 switch(表达式) 中的表达式结果,和每个 case 后的值做全等匹配。你当前代码中 switch(val) 传入的是数字类型的数组元素,而每个 case 后是条件判断返回的布尔值(true/false),数字和布尔值全等比较永远不成立,所以所有判断都会走 default 分支。
    修复方式:将 switch(val) 改为 switch(true),让 case 后的布尔判断结果和 true 做匹配。
  • 问题2:计数变量声明错误
    你用 const 声明了 neg、pos、zero 三个变量,const 声明的是常量,声明后不允许修改值,后续执行 +=1 操作时会直接抛出语法错误,逻辑无法正常执行。
    修复方式:将 const neg=0, pos=0, zero=0; 改为 let neg=0, pos=0, zero=0;。
  • 可选优化:如果开启prompt输入的逻辑,split() 得到的数组元素是字符串类型,需要转成数字再做判断,否则可能出现类型匹配问题,可以在取值时加类型转换:let val = Number(arr[i]);。
修复后可运行代码
function counter() {
    // 若使用prompt输入,可开启下方代码自动转数组元素为数字
    // const arr = prompt("Enter numbers").split(",").map(Number);
    let arr = [1,2,3,-1,0];
    console.log(arr.length);
    // 改为let声明可修改的计数变量
    let neg=0, pos=0, zero=0;
    for (var i = 0; i < arr.length; i++) {
        let val = arr[i];
        console.log(val);
        // switch传入true匹配case的布尔判断结果
        switch (true) {
            case val === 0:
                zero += 1;
                console.log("zero");
                break;  
            case val < 0:
                neg += 1;
                console.log("neg");
                break;
            case val > 0:
                pos += 1;
                console.log("pos");
                break;
            default:
                console.log("not working");
                break;
        }
    }
    document.write("Negatives: " + neg+"<br>");
    document.write("Positives: " + pos+"<br>");
    document.write("Zeroes: " + zero+"<br>");
}
// 调用函数即可执行
counter();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:09:00