簡體   English   中英

在其他條件下切換語句,否則無法達到

[英]Switch statement in if else conditional, else not being reached

這是我編寫的用於解析車輛VIN編號信息的條件的簡化版本。 如果我傳入了諸如JA3XXXXXXXXXXXXXX之類的VIN,它會返回並反對具有以下區域的屬性:“亞洲”;國家/地區:“日本”; 並制作:“五十鈴”; 但是如果我將其傳遞給2A5XXXXXXXXXXXXXXXXX,我會期望一個對象的屬性設置為region:'North America'; ,國家/地區:“加拿大”; 並做出:“克萊斯勒”; 取而代之的是,我得到了一個區域屬性設置為“亞洲”的對象。 是一個jsFiddle,代碼如下所示。

var vehicle = {},
nthDigit = function (stringifiedVin, i) {
    var nthChar = stringifiedVin.charAt(i);
    return nthChar;
},
parseVin = function () {
    var i = 0;
    for (i = 0; i < 16; i += 1) {
        if (i === 0) {
            if (nthDigit(stringifiedVin, 0) === 'J' || 'K' || 'L' || 'M' || 'N' || 'P' || 'R') {
                vehicle.region = 'Asia';
                switch (nthDigit(stringifiedVin, i)) {
                case 'J':
                    vehicle.country = 'Japan';
                    switch (nthDigit(stringifiedVin, 1)) {
                    case 'A':
                        if (nthDigit(stringifiedVin, 2) === 'A' || 'B' || 'C' || 'D' || 'E' || 'F' || 'G' || 'H' || 'J' || 'K' || 'L' || 'M' || 'N' || 'P' || 'R' || 'S' || 'T' || 'U' || 'V' || 'W' || 'X' || 'Y' || 'Z') {
                            vehicle.make = 'Isuzu';
                        } else if (nthDigit(stringifiedVin, 2) === '3' || '4' || '5' || '6' || '7') {
                            vehicle.make = 'Mitsubishi';
                        } else {
                            vehicle.make = 'Not Read';
                        }
                        break;
                   }         
                   break;
               }
           } else if (nthDigit(stringifiedVin, 0) === '1' || '2' || '3' || '4' || '5') {
               vehicle.region = 'North America';
               if (nthDigit(stringifiedVin, 0) === '2') {
                   vehicle.country = "Canada";
                   switch (nthDigit(stringifiedVin, 1)) {
                   case 'A':
                       if (nthDigit(stringifiedVin, 2) === '2' || '3' || '4' || '5' || '6' || '7' || '8') {
                           vehicle.make = 'Chrysler';
                       } else {
                           vehicle.make = 'Not Read';
                       }
                       break;
                   }
                   break;
               }
           }
           return vehicle; 
        }
   }
}

我不喜歡|| 零件以您認為的方式工作。 因為'2'不是false,所以它將運行Alert():

if ('A' === '1' || '2') 
    alert('match')

我會使用一個開關,否則您將需要像下面這樣拼寫:

var nd = nthDigit(stringifiedVin, 0);
if (nd === 'J' || nd === 'K' ||  nd === 'L' ||  ...

較短的一個:

 if("JKLMNP".indexOf(nthDigit(stringifiedVin, 0)) > -1){
        //....
 }

@JBrooks我認為您對雙管道或運算符如何在條件語句中造成麻煩是正確的。 我認為這是由於操作員處理虛假值的方式所致,如 SO帖子中所示。 當我意識到JA3XXXXXXXXXXXXXX應該返回三菱而不是五十鈴時,我最終完全擺脫了if語句。 我找到了解決辦法在這里使用@KennyTM答案上設置多個案件。

暫無
暫無

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

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