2017-02-24 25 views
0

我在javascript中存在循環問題。
我突然遇到了一個奇怪的問題,我的循環沒有觸發某些值,儘管看起來應該如此。即使它應該不會進入循環

var j = holiday_starts; 

console.log(j); 
console.log(holiday_ends); 

if (j<=holiday_ends){ 
    console.log("TRUE"); 
} 

凡在這種情況下,holiday_starts是6和holiday_ends是10(與控制檯日誌選中)。這不是記錄TRUE。它只發生在某些情況下而不是其他情況。

如果我直接設置變量(j = 6, holiday_ends = 10),那麼它會記錄TRUE。

我錯過了什麼?這是由於我的代碼中的其他東西嗎?

+0

檢查數據類型 –

+1

你應該知道* string *「6」可能不小於「10」,如果它使用的是字典排序。 – paxdiablo

+1

然後按照建議檢查數據類型。或者嘗試使用'parseInt(holiday_ends)'同樣用於開始或'Number(holiday_ends)'。 –

回答

1

我懷疑你正在holiday_starts和holiday_ends爲字符串(可能是從一個用戶的輸入?)。當這種情況發生時,特點比較被製成字符串,6爲1後的字母,「6」 <「10」是假的,就像這個片斷:

var holiday_starts = "6"; 
 
var holiday_ends = "10"; 
 
var j = holiday_starts; 
 

 
console.log(j); 
 
console.log(holiday_ends); 
 

 
if (j<=holiday_ends){ 
 
    console.log("TRUE"); 
 
}

在這種情況下,你應該在比較之前parseInt輸入,下面的代碼段工程按預期:

var holiday_starts = parseInt("6"); 
 
var holiday_ends = parseInt("10"); 
 
var j = holiday_starts; 
 

 
console.log(j); 
 
console.log(holiday_ends); 
 

 
if (j <= holiday_ends) { 
 
    console.log("TRUE"); 
 
}

1

您正在比較不是整數的字符串。所以只需在比較之前轉換爲整型。

像這樣:

if (Number(j)<=Number(holiday_ends)){ 
    console.log("TRUE"); 
} 
0

其中一個變量可能包含一個字符串值。

通過typeof關鍵字檢查:

var j = holiday_starts; 

console.log(j); 
console.log(holiday_ends); 

if (j<=holiday_ends){ 
    console.log("TRUE"); 
} 
else { 
    console.log("Type of j:" + (typeof j) + " // Type of holiday_ends:" + (typeof holiday_ends)); 
} 

並解決相應

1

他們被按字母順序比較,因爲它假定它們是字符串。

使用​​或parsInt()將它們明確轉換爲數字。然後你會得到正確的答案