Javascript switch 语句发现不是大小写的问题:"none"

Javascript problem with switch statement that find not case: "none"

我的代码必须查看 mapPoint 中是否有球,然后根据球的颜色更改球所在像素的颜色。 这是我的代码:

function UpdateColorInMapPoints(mapPointIndexs)
{
    mapPointIndexs.forEach(mapPointIndex => {
        var mapPointData=ballsMap[mapPointIndex]
        var ballsAtTheMapPoint=ballsMap[mapPointIndex].balls;
        var temperature;
        if(ballsAtTheMapPoint.length>0)
        {
            temperature=balls[ballsAtTheMapPoint[ballsAtTheMapPoint.length-1]].temperature;
        }else
        {
            temperature="none1";
        }
        var column,line=0;
        while(line<scale)
        {
            column=0;
            while(column<scale)
            {
                putTemperatureColorAt(temperature,(mapPointData.horizontalPosition*scale+column)*4+(mapPointData.verticalPosition*scale+line)*4*imgWidth*scale);
                column++;
            }
            line++;
        }
    });
    canvasContext.putImageData(ImgData,0,0);
}

function putTemperatureColorAt(temperature,index)
{
    switch(Math.round(temperature))
    {
        case -5:
        ImgData.data[index+0]=0;
        ImgData.data[index+1]=255;
        ImgData.data[index+2]=255;
        ImgData.data[index+3]=255;
            break;
        case -4:
        ImgData.data[index+0]=50;
        ImgData.data[index+1]=255;
        ImgData.data[index+2]=200;
        ImgData.data[index+3]=255;
            break;
        case -3:
        ImgData.data[index+0]=100;
        ImgData.data[index+1]=255;
        ImgData.data[index+2]=150;
        ImgData.data[index+3]=255;
            break;
        case -2:
        ImgData.data[index+0]=150;
        ImgData.data[index+1]=255;
        ImgData.data[index+2]=100;
        ImgData.data[index+3]=255;
            break;
        case -1:
        ImgData.data[index+0]=200;
        ImgData.data[index+1]=255;
        ImgData.data[index+2]=50;
        ImgData.data[index+3]=255;
            break;
        case 0:
        ImgData.data[index+0]=255;
        ImgData.data[index+1]=255;
        ImgData.data[index+2]=0;
        ImgData.data[index+3]=255;
            break;
        case 1:
        ImgData.data[index+0]=255;
        ImgData.data[index+1]=200;
        ImgData.data[index+2]=0;
        ImgData.data[index+3]=255;
            break;
        case 2:
        ImgData.data[index+0]=255;
        ImgData.data[index+1]=150;
        ImgData.data[index+2]=0;
        ImgData.data[index+3]=255;
            break;
        case 3:
        ImgData.data[index+0]=255;
        ImgData.data[index+1]=100;
        ImgData.data[index+2]=0;
        ImgData.data[index+3]=255;
            break;
        case 4:
        ImgData.data[index+0]=255;
        ImgData.data[index+1]=50;
        ImgData.data[index+2]=0;
        ImgData.data[index+3]=255;
            break;
        case 5:
        ImgData.data[index+0]=255;
        ImgData.data[index+1]=0;
        ImgData.data[index+2]=0;
        ImgData.data[index+3]=255;
            break;
        case "none1":
        ImgData.data[index+0]=0;
        ImgData.data[index+1]=0;
        ImgData.data[index+2]=0;
        ImgData.data[index+3]=255;
            break;
        default:
            console.log("Impossible to find color:"+temperature);
    }
}

当我 运行 代码时,控制台说:“无法找到颜色:none1” 这意味着 temperature="none1" 但如果 temperature="none1" 开关的输出不应该是默认的,因为存在 "none1":

       case "none1":
            ImgData.data[index+0]=0;
            ImgData.data[index+1]=0;
            ImgData.data[index+2]=0;
            ImgData.data[index+3]=255;
                break;

我很不明白哪里错了,希望我的英语不会太差。

检查你的 switch 语句。

console.log(Math.round("none1"))

将您的开关更改为以下内容:

switch (isFinite(temperature) ? Math.round(temperature) : temperature) {
  // ...
}

您想避免在非有限值上舍入,也就是无效的 Number


例子

const process = (temperature) => {
  switch (isFinite(temperature) ? Math.round(temperature) : temperature) {
    case 0: return 'Zero';
    case 1: return 'One';
    case 'none1': return 'None';
    default: throw new Error(`Unknown temperature: ${temperature}`);
  }
};

console.log(process(0.2));       // Zero
console.log(process(0.8));       // One
console.log(process('none1'));   // None
console.log(process(undefined)); // throw Error