Ich bin neulich auf dieses Problem gestoßen und konnte nicht herausfinden, was genau unter der Haube vor sich geht. Was sind die Regeln für die Zwangsumwandlung einer Zeichenkette in einen Zahlentyp? und warum schlägt es in der Instanz von "5.0.1" fehl?
var numStr = '5.0';
var floatStr = '5.0.1';
//Passes
if (numStr >= 4) {
alert('5 > 4');
}
//Fails
if (floatStr >= 4) {
alert('5.0.1 > 4');
}
console.log(parseInt(numStr)); //5
console.log(parseInt(floatStr)); //5
console.log(Number(numStr)); //5
console.log(Number(floatStr)); //NaN
6 Stimmen
Was wäre die Entsprechung in der Mathematik? 5.0.1??
0 Stimmen
Mir ist klar, dass 5.0.1 keine Zahl ist. Ich bin auf der Suche nach einem Einblick in den Prozess der Zwangsbehandlung in diesem Fall. Was tut parseInt tun, dass der Prozess der String -> num nicht tun?
0 Stimmen
An dieser Stelle sei angemerkt, dass Sie bei der Verwendung von implizitem Zwang gegenüber
*1
erhalten Sie auch das gleiche Verhalten wie bei der expliziten Typisierung. Das heißtfloatStr*1 // NaN
.