簡體   English   中英

Javascript switch 語句發現不是大小寫的問題:“無”

[英]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 (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

檢查你的開關語句。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM