2016-12-18 33 views
-3

我有以下一段代碼。出於某種原因,我不想執行的案例陳述(案例'2'的第二個案例)正在執行,除了正確的案例(案例'4')之外。在網上閱讀後,似乎大多數人能夠通過添加「break」語句來解決類似的問題。但它不適合我。請在下面advise.Output是從我的瀏覽器開關語句在JavaScript中無法正常工作

var chk = '4' 
 

 
switch (chk) { 
 
    case '4': 
 
    var locations = [ 
 
     ["936001_STURGEON_BAY_MEYER", 44.8358, -87.3305, "LRA", 1], 
 
     ["936087_SHADOW_LAKE", 45.2183, -88.5981, "LRA", 2], 
 
     ["936136_PIG", 44.5925, -88.0808, "OMS", 3], 
 
     ["936136_PIG", 44.5925, -88.0808, "OMS", 4] 
 
    ]; 
 

 
    var map = new google.maps.Map(document.getElementById('map'), { 
 
     zoom: 15, 
 
     center: new google.maps.LatLng(locations[0][1], locations[0][2]), 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 

 
    var infowindow = new google.maps.InfoWindow({ 
 
     maxWidth: 400000 
 
    }); 
 
    var locations_all_cells1 = locations; 
 
    var marker, i; 
 

 
    for (i = 0; i < locations_all_cells1.length; i++) { 
 
     var type1 = locations_all_cells1[i][3]; 
 

 
     switch (type1) { 
 
     case "OMS": 
 
      marker1 = new google.maps.Marker({ 
 
      position: new google.maps.LatLng(locations_all_cells1[i][1], locations_all_cells1[i][2]), 
 
      map: map, 
 
      icon: 'http://maps.google.com/mapfiles/ms/icons/green-dot.png' 
 
      }); 
 
      google.maps.event.addListener(marker1, 'click', (function(marker1, i) { 
 
      return function() { 
 
       infowindow.setContent(locations_all_cells1[i][0]); 
 
       infowindow.open(map, marker1); 
 
      } 
 
      })(marker1, i)); 
 
      break; 
 

 
     case "LRA": 
 
      marker2 = new google.maps.Marker({ 
 
      position: new google.maps.LatLng(locations_all_cells1[i][1], locations_all_cells1[i][2]), 
 
      map: map, 
 
      icon: 'http://maps.google.com/mapfiles/ms/icons/red-dot.png' 
 
      }); 
 
      google.maps.event.addListener(marker2, 'click', (function(marker2, i) { 
 
      return function() { 
 
       infowindow.setContent(locations_all_cells1[i][0]); 
 
       infowindow.open(map, marker2); 
 
      } 
 
      })(marker2, i)); 
 
      break; 
 

 
     case "UPSAVE": 
 
      marker3 = new google.maps.Marker({ 
 
      position: new google.maps.LatLng(locations_all_cells1[i][1], locations_all_cells1[i][2]), 
 
      map: map, 
 
      icon: 'http://maps.google.com/mapfiles/ms/icons/yellow-dot.png' 
 
      }); 
 
      google.maps.event.addListener(marker3, 'click', (function(marker3, i) { 
 
      return function() { 
 
       infowindow.setContent(locations_all_cells1[i][0]); 
 
       infowindow.open(map, marker3); 
 
      } 
 
      })(marker3, i)); 
 
     } 
 
    } 
 
    break; 
 

 
    case '2': 
 
    var locations = [ 
 
     ["936001_STURGEON_BAY_MEYER", 44.8358, -87.3305, "LRA", 1], 
 
     ["936087_SHADOW_LAKE", 45.2183, -88.5981, "LRA", 2], 
 
     ["936136_PIG", 44.5925, -88.0808, "OMS", 3], 
 
     ["936136_PIG", 44.5925, -88.0808, "OMS", 4] 
 
    ]; 
 

 
    var map = new google.maps.Map(document.getElementById('map'), { 
 
     zoom: 15, 
 
     center: new google.maps.LatLng(locations[0][1], locations[0][2]), 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 

 
    var infowindow = new google.maps.InfoWindow({ 
 
     maxWidth: 400000 
 
    }); 
 
    var locations_all_cells = ; 
 
    var marker, i; 
 

 
    for (i = 0; i < locations_all_cells.length; i++) { 
 
     var type1 = locations_all_cells[i][3]; 
 
    } 
 
    break; 
 
    
 
    default: 
 
    text = "Looking forward to the Weekend"; 
 
} 
 
console.log(text);

錯誤信息

enter image description here

+1

您還沒有定義'type1'!而且我確定,這不會進入第2種情況......或者如果確實如此,請將'chk ='4';'作爲字符串。 –

+0

在上面的代碼中,只有默認的分支會被執行(既不是case'2'也不是case'4'),因爲你的例子都不匹配'4'。請注意'4!=='4''。 – Paulpro

+0

@Paulpro'switch'是否執行嚴格的檢查? –

回答

0

我終於從一個朋友工作了我的問題有幫助。事實證明,Javascript並不喜歡未初始化的case語句中的變量。在其中一個案例陳述中,我使用了一個變量,我之前根據某種邏輯分配了一個值。儘管這個案例陳述沒有被評估爲「真實」,但我的程序卻發生了錯誤。

例如在下面的程序代碼會出錯誤的案件n和m如果b是空/空,即使m爲「假」:

switch(expression) { 
case n: 
    break; 
case m: 
    Var a=b; 
    break; 
default: 
    default code block 
} 
1

MDN Docs for switch

switch語句首先計算它s表達。然後查找第一個case表達式,其表達式的計算結果與輸入表達式(使用嚴格比較,===)的結果相同,並將控制轉移到該子句,執行關聯的語句。

switch進行了嚴格的把關,不符合您的'4'(串)和4(數量)。所以,你需要改變像你的代碼:

var chk = '4'; 

更新

如果你的瀏覽器確實是正確加載它,像chk = '4',那麼它應該工作。在這裏看到:

var chk = '4'; 
 
// Added this for checking. 
 
var type1 = 'OMS'; 
 

 
switch (chk) { 
 
    case '4': 
 
    switch (type1) { 
 
     case "OMS": 
 
     text = "4 - OMS"; 
 
     break; 
 
     case "LRA": 
 
     text = "4 - LRA"; 
 
     break; 
 
     case "UPSAVE": 
 
     text = "4 - UPSAVE"; 
 
    } 
 
    break; 
 
    case '2': 
 
    // ####Do some Stuff here## 
 
    break; 
 
    default: 
 
    text = "Looking forward to the Weekend"; 
 
} 
 
console.log(text);

+0

@ssharma如果你的瀏覽器的代碼確實是'chk ='4'',那麼它肯定會工作的人。你能發表正確的代碼嗎? –

+0

所以我實際上通過在後臺執行一些其他的東西來獲得Variable chk var chk ='<%= @tag %>'的值。我檢查了我的瀏覽器,輸出確實是var chk ='4'。仍然沒有運氣! – ssharma

+0

@ssharma發佈完整的代碼,它在瀏覽器中呈現。 –