Ich wundere mich, warum ECMA-Skript keine Integer out-of-the-box unterstützt. Natürlich weiß ich, dass es einige Ganzzahlen gibt (in der Antwort auf diese Frage gibt es eine gute Zusammenfassung: Difference between floats and ints in Javascript?). Aber das sind immer noch keine "echten" ganzen Zahlen. Und die Probleme mit Floats als Ints sind reichlich vorhanden. Warum unterstützt es keine Ganzzahlen und warum wurde dies nicht mit ECMA-Skript 6 behoben?Warum bietet das ECMA-Skript keinen Integer-Typ?
Antwort
Die Sprache wurde in 10 Tagen entworfen und implementiert, also war es ursprünglich eine Frage der Zeit. Von der horses mouth:
Ja, es war von Anfang an da. Aber Bignums waren nicht in den Karten. JS musste "nur wie Java aussehen", nur weniger, sei Javas dummer kleiner Bruder oder Junge-Geisel-Kumpel. Außerdem musste ich in zehn Tagen fertig sein oder etwas Schlimmeres als JS wäre passiert.
Also standardmäßig doppelt int unter der Haube, und bitweise Ops sind 32-Bit-Int (Uint, wenn Sie >>> verwenden). Ich beschuldige Java.
Ich würde nicht wissen, warum es nicht auf dem Tisch für ES2015 war. Für mich scheint es so, als ob man die Arbeit entfernen würde, aber ich würde raten. Brendan Eich ist ziemlich aktiv auf Twitter, du könntest ihn wahrscheinlich einfach fragen. :)
Ich denke, die politischen Machtkämpfe, die ES4 töteten - insbesondere IBMs kindlicher, aber erfolgreicher Versuch, den gesamten Prozess zu bombardieren, wenn "IEEE 754r DEC128" nicht eingeschlossen wurde - brachte TC39 davon ab, sich mit einem der Zahlentypen in Harmony herumzuärgern. Nur eine Theorie. https://www.youtube.com/watch?v=V1_Y-KVhZ9Q&t=14m – max
@KitSunde: Ich werde meinen Kommentar entfernen, da die andere Antwort vermittelt, woran ich gerade denke. – nhahtdh
Es * war * auf dem Tisch für ES2015. Sie haben recht, es ist eine Menge Arbeit, um dies a) richtig und b) rückwärtskompatibel zu machen, und daher wurden Vorschläge, die (benutzerdefinierte) neue Typen einführten, auf ES2016 verschoben. – Bergi
Kann nicht wirklich für Harmonie sprechen, Douglas Crockford, sagte, dass sie daran interessiert waren, einen weiteren Zahlentyp in zukünftigen Ausgaben von ES hinzuzufügen. Er sagte jedoch auch, dass das Hinzufügen eines neuen Nummerntyps der Sprache Gewalt antat, dass die Einfachheit der Sprache wünschenswert sei.
https://www.youtube.com/watch?v=V1_Y-KVhZ9Q
Er beginnt im Grunde redet über „Anzahl“ von 13.52 bis 26:00
- 1. Art bietet keinen Anruf Operator
- 2. Typ `Klassenname` bietet keinen Aufrufoperator. C++
- 3. Warum Literalwert hat keinen Typ?
- 4. Warum bietet Java keinen Standardkonstruktor, wenn der Konstruktor der Klasse parametrisiert ist?
- 5. Bietet Android Widget wie das iPhone UIPickerView
- 6. Warum Guava bietet keine Möglichkeit, Mapkeys
- 7. Warum bietet JPA CriteriaQuery keine Aktualisierungsabfrage?
- 8. Warum webpack-dev-middleware bietet `publicPath`-Konfiguration?
- 9. Warum bietet JUnit assertNotEquals-Methoden nicht an?
- 10. Warum verursacht das Vergleichen von Typen in MYSQL keinen Fehler?
- 11. Warum geben Web-Worker keinen Zugriff auf das DOM-Objekt?
- 12. Warum UserThread, das mit ScheduleExecutorService ausgeführt wird, keinen Müll sammelt
- 13. Warum akzeptiert bash keinen Wert für das erste Arrayelement?
- 14. Warum gibt das Senden dieses Formulars keinen Fehler?
- 15. Android: Warum bietet das SDK dem Programmierer nicht einfach das Hinzufügen von WiFi-Profilen (EAP)?
- 16. Warum hat Node keinen getElementByTagName()?
- 17. Warum Xcode keinen Absturzgrund anzeigen?
- 18. Warum hat .htaccess keinen Effekt?
- 19. Warum verursacht @NotNull keinen Kompilierzeitfehler?
- 20. Warum bietet F # keine benutzerdefinierte Überladung für den Operator ==?
- 21. Warum Scala hat keinen Deklinktyp?
- 22. Warum GPRS-Modem eingebetteten TCP/IP-Stack bietet
- 23. Warum hat SKShapeNode keinen Ankerpunkt?
- 24. Warum hat SLComposeViewController keinen Delegaten?
- 25. Warum gibt es keinen Kompilierungsfehler?
- 26. Warum nimmt TR keinen Stil?
- 27. Warum verursacht Komma (,) keinen Kompilierungsfehler?
- 28. Warum erhalte ich keinen Methodenfehler?
- 29. Warum benötigt die statische Methode in einer Schnittstelle keinen Standardzugriffsmodifikator?
- 30. Warum bietet das Android Studio nicht genug Zeit für einen Emulator, um sich zu registrieren?
Da es keine expliziten Typdeklarationen für eine Reihe (und somit keine Möglichkeit, einen Unterschied zwischen einem int auszudrücken und ein Float), das Leben ist viel weniger kompliziert, wenn es nicht mehrere Arten von Zahlen gibt, die aus einer gegebenen Operation resultieren könnten. – jfriend00
TypedArrays sind ziemlich real. Wonach suchen Sie? – Amit
Ich habe versucht zu verstehen, warum es so ist und ob es irgendeine Hoffnung gibt, die irgendwann behoben wird. In Bezug auf die Einfachheit: IMHO ist dies eine Ex-post-Begründung. Ich verstehe vollkommen, dass man nicht viel besser machen kann, wenn man in 10 Tagen eine Sprache ausbasteln muss. –