使用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
相关产品推荐
相关产品推荐

