# Frage Unterschied Number/String und Schleifen?



## N3WM4N (27. Aug 2021)

Hi ich habe eine kurze Frage zu Schleifen mit Strings/Numbers. 
Und zwar: Im folgendem Code wird eine Nutzereingabe eingelesen mit der prompt Funktion.
Die eingelesene Zahl ist ja automatisch ein String "". Normalerweise wandelt man den String 
in eine Fließkommazahl mit parseFloat um. Jetzt habe ich aber festgestellt, dass meine Schleife 
auch mit dem String funktioniert bzw ausgeführt wird. Wieso ist das so?

```
<script type="text/javascript"> //<![CDATA[
    "use strict"
    function Button()
    {
    var i=1;
    var i_max=prompt("Bitte geben Sie eine Grenze ein")
    //i_max=parseFloat(i_max)
    var ausgabe="<tr><th>Zähler</th><th>Quadrat</th></tr>";
    do
        {
        
        
        ausgabe=ausgabe+"<tr><td>"+i+"</td><td>"+i**2+"</td></tr>";
        i=i+1
        }while(i**2<i_max)
    
    document.getElementById("1").innerHTML=ausgabe;
    }
        //]]>
</script>
```


----------



## LimDul (27. Aug 2021)

JavaScript Type Conversions
					

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.




					www.w3schools.com
				




Javascript nimmt solche Konvertierungen bei Bedarf automatsich vor.


----------



## N3WM4N (27. Aug 2021)

ok vielen Dank. Also um es formal richtig zu machen. nutzt man trotzdem parseFloat?


----------



## LimDul (27. Aug 2021)

Ich vermeide JavaScript wie der Teufel das Weihwasser, daher kann ich zu Best Practices nichts sagen.

Aber grundsätzlich würde ich sagen ja, lieber explizit parsen. Wie die Seite ja auch sagt:



> When JavaScript tries to operate on a "wrong" data type, it will try to convert the value to a "right" type.
> 
> *The result is not always what you expect:*



Dann hat man eine Stelle, wo man das konvertiert und hat auch die Chance auf Fehler & Co zu reagieren bzw. Prüfungen zu machen anstelle sich auf "Magie" zu verlassen.


----------



## M.L. (27. Aug 2021)

Und wenn nicht raten will (was z.B. interne Umwandlungen angeht) kann man sich TypeScript ansehen.


----------



## Oneixee5 (27. Aug 2021)

N3WM4N hat gesagt.:


> ok vielen Dank. Also um es formal richtig zu machen. nutzt man trotzdem parseFloat?


parseFloat würde man in dem Beispiel so nicht nutzen, die Funktion ist dafür gedacht Gleitkommazahlen zu parsen. Normalerweise würde man in DE eine Gleitkommazahl mit einen Komma eingeben, also z.B.: "12,55". Das Resultat wäre dann aber parseFloat("12,55") ist 12, das ist bestimmt nicht gewollt. Außerdem werwendet die gezeigt Berechnung immer Ganzzahlen.
Auch Window.prompt() ist hier nicht gut geeignet. Ein prompt-Dialogfenster hat einen einzeiligen Text, einen Abbrechen-Button und einen OK-Button und gibt den (möglicherweise leeren) Text zurück, der ins Textfeld eingegeben wurde. Man muss hier also mit allen möglichen unsinnigen Eingaben rechnen. Dialogfenster  sind außerdem_ modal _- sie verhindern, dass der Anwender auf den Rest der Seite zugreifen kann. In einer Webanwendung würde man so etwas normalerweise nicht machen.
Die Verwendung von Prompt wäre z.B.:
`var aNumber = Number(window.prompt("Gib eine Zahl ein", ""));`
Die Überprüfung würde etwa so erfolgen:
`if (isNaN(aNumber)) {
    return 'Not a Number!';
  }
  return aNumber;`

s.auch: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number


----------

