2016-10-26 5 views
2

Ich habe eine Funktion switcher(), die ein Object-Argument hat, video. Es sollte 'Start' wenn video.start <= video.ende protokollieren. Es funktioniert in den meisten Fällen gut (Beispiel: video.start = 1 und video.ende = 3), aber wenn video.start = 9 und video.ende = 10 es protokolliert 'End'.Warum sind 10 weniger als 9?

function switcher(video) 
{ 
    console.log("Start: " + video.start); 
    console.log("End: " + video.ende); 

    if(video.start <= video.ende) // Not working correctly 
    { 
     console.log("Start"); 
    } 
    else 
    { 
     console.log("End"); 
    } 
} 

console.log() Erfolge:

console.log: addon: Start: 1 
console.log: addon: End: 3 
console.log: addon: Start 

console.log() Failed:

console.log: addon: Start: 9 
console.log: addon: End: 10 
console.log: addon: End 

Warum ist es so?
Wie kann ich das beheben?

+0

Mögliches Duplikat von [Javascript String/Integer Vergleiche] (http://stackoverflow.com/questions/5630123/javascript-string-integer-comparisons) – Makyen

+0

Zusätzliche doppelte Ziele: [Warum ist "10"> "9" = false?] (http://stackoverflow.com/questions/24025586/why-does-10-9-false) und [Warum ist beim Vergleichen von Zeichenfolgen in JavaScript eine Zeichenfolge größer als die andere Zeichenfolge?] (http: // stackoverflow. com/questions/7087811/why-is-one-string-größer als die anderen-wenn-strings-in-javascript vergleichen – Makyen

Antwort

3

Es klingt wie video.start und video.ende sind Strings, keine Zahlen, so dass sie lexikographisch verglichen werden, nicht numerisch. Konvertiere sie vor dem Vergleich in Zahlen.

if (Number(video.start) <= Number(video.ende)) 

Oder Sie können den Code beheben, die das video Objekt erstellt, so dass es zu dieser Zeit in eine Zahl umwandelt.

Verwandte Themen