Algorithmus für JavaScript vordefinierte Funktionen (parseInt, parseFloat, isNaN, etc.)

8

Was ist der beste Weg, wenn überhaupt möglich, den zugrunde liegenden Code für die vordefinierten Funktionen in Javascript zu sehen? Gibt es Dokumentation, die zeigt, wie diese codiert wurden, oder eine einfache Möglichkeit, den zugrunde liegenden Code tatsächlich anzuzeigen?

  • parseInt
  • parseFloat
  • isNaN
KingKongFrog 20.03.2013, 20:37
quelle

3 Antworten

2

Nachdem ich weiter gesucht habe, fand ich dies in der ECMAScript-Spezifikation. Ссылка

Wenn die Funktion parseInt aufgerufen wird, werden die folgenden Schritte ausgeführt:

  1. Sei inputString ToString (string).
  2. Sei S ein neu erzeugter Teilstring von inputString, der aus dem ersten Zeichen besteht, das nicht a ist StrWhiteSpaceChar und alle Zeichen, die diesem Zeichen folgen. (Mit anderen Worten, entfernen Sie das führende Weiß Leerzeichen.) Wenn inputString keine solchen Zeichen enthält, sei S die leere Zeichenfolge.
  3. Lass das Zeichen 1 sein.
  4. Wenn S nicht leer ist und das erste Zeichen von S ein Minuszeichen ist, dann sei das Zeichen 1.
  5. Wenn S nicht leer ist und das erste Zeichen von S ein Pluszeichen + oder ein Minuszeichen - ist, dann entferne das erste Zeichen von S.
  6. Sei R = ToInt32 (radix).
  7. Lassen Sie stripPrefix wahr sein.
  8. Wenn R  0, dann © Ecma International 2011 105 ein. Wenn R & lt; 2 oder R & gt; 36, dann gib NaN zurück. b. Wenn R  16 ist, sei stripPrefix falsch.
  9. Sonst, R = 0 ein. Sei R = 10.
  10. Wenn stripPrefix wahr ist, dann ein. Wenn die Länge von S mindestens 2 ist und die ersten zwei Zeichen von S entweder -0x‖ oder -0X‖ sind, dann entferne die ersten zwei Zeichen von S und lassen R = 16.
  11. Wenn S ein beliebiges Zeichen enthält, das keine Radix-R-Ziffer ist, dann sei Z die Teilmenge von S, die aus allen besteht Zeichen vor dem ersten solchen Zeichen; Ansonsten sei Z S.
  12. Wenn Z leer ist, gebe NaN zurück.
  13. Sei mathInt der mathematische Integer-Wert, der in der Radix-R-Notation durch Z dargestellt wird, indem man die Buchstaben verwendet A-Z und a-z für Ziffern mit den Werten 10 bis 35. (Wenn R jedoch 10 ist und Z mehr als 20 enthält Englisch: eur-lex.europa.eu/LexUriServ/LexUri...0999: EN: HTML signifikante Ziffern, jede signifikante Stelle nach dem 20. kann durch eine Ziffer ersetzt werden Implementierung; und wenn R nicht 2, 4, 8, 10, 16 oder 32 ist, dann kann mathInt von der Implementierung abhängig sein Annäherung an den mathematischen ganzzahligen Wert, der in Radix-R-Schreibweise durch Z dargestellt wird.)
    1. Die Zahl ist der Zahlenwert für mathInt.
    2. Zeichen Nummer zurückgeben. HINWEIS parseInt interpretiert möglicherweise nur einen führenden Teil der Zeichenfolge als Ganzzahl; Es ignoriert alle Zeichen, die kann nicht als Teil der Notation einer ganzen Zahl interpretiert werden, und es wird kein Hinweis gegeben, dass solche Zeichen vorhanden waren ignoriert.

Wenn die Funktion parseFloat aufgerufen wird, werden die folgenden Schritte ausgeführt:

  1. Sei inputString ToString (string).
  2. Lasse trimmedString eine Teilzeichenfolge von inputString sein, die aus dem linken Zeichen besteht, das nicht a ist StrWhiteSpaceChar und alle Zeichen rechts von diesem Zeichen. (Mit anderen Worten, entfernen Sie das führende Weiß Leerzeichen.) Wenn inputString keine solchen Zeichen enthält, sollte trimmedString die leere Zeichenfolge sein.
  3. Wenn weder trimmString noch ein Präfix von trimmedString die Syntax eines StrDecimalLiterals erfüllt (siehe 9.3.1), gib NaN zurück.
  4. Sei numberString das längste Präfix von trimmedString, das trimmedString selbst sein könnte, das erfüllt die Syntax eines StrDecimalLiteral.
  5. Gibt den Zahlenwert für die MV von numberString zurück.

HINWEIS parseFloat interpretiert möglicherweise nur einen führenden Teil der Zeichenfolge als Zahlenwert. Es ignoriert alle Zeichen, die kann nicht als Teil der Notation eines Dezimal-Literals interpretiert werden, und es wird kein Hinweis darauf gegeben, dass solche Zeichen vorhanden waren ignoriert.

Gibt true zurück, wenn das Argument auf NaN umschaltet und andernfalls false zurückgibt.

  1. Wenn ToNumber (Zahl) NaN ist, true zurück.
  2. Andernfalls gebe false zurück. HINWEIS Ein zuverlässiger Weg für ECMAScript-Code zu testen, ob ein Wert X ein NaN ist, ist ein Ausdruck der Form X! == X. Das Ergebnis wird nur dann wahr sein, wenn X ein NaN ist.
KingKongFrog 20.03.2013, 20:43
quelle
6

Sie sind native Funktionen und möglicherweise in der Sprache codiert, in der Ihre JS-Engine geschrieben wurde - Sie müssen sich an die Quelle wenden.

Sie sind jedoch wahrscheinlich eher an der EcmaScript-Spezifikation interessiert, die beschreibt, wie die Algorithmen funktionieren.

Und wenn Sie Glück haben, könnten Sie für einige Funktionen sogar ein JS-Äquivalent finden. Sie finden sie meist auf Seiten, die ES-Implementierungen gegen den Standard testen.

    
Bergi 20.03.2013 20:40
quelle
0

Diese Funktionen sind je nach Browser implementierungsspezifisch und werden nicht in JS geschrieben (es sei denn, jemand hat sich entschieden, eine Browser-Engine in JS zu schreiben). Es ist nicht garantiert, dass der Code in verschiedenen Umgebungen identisch ist, obwohl er sich (theoretisch) an die ECMAScript-Spezifikation halten muss.

    
Ben McCormick 20.03.2013 20:43
quelle

Tags und Links