Vor ein paar Tagen wollte die Kreditkartenseite eine neue Funktion integrieren, aber das war wirklich schwierig, da jeder weiß, dass auf der Rückseite der Kreditkarte ein Ablaufdatum steht Diese Informationen müssen zur Datenverarbeitung an die Bank gesendet werden. Nachdem der Benutzer die Gültigkeitsdauer der Kreditkarte eingegeben hat, wird das System eine Beurteilung der Gültigkeitsdauer vornehmen Die Ablaufzeit darf nicht innerhalb eines Monats liegen. Da das eingegebene Jahr, der Monat und der Tag in drei Textfeldern enthalten sind, dachte ich, dass es mühsam wäre, sie in Zeit umzuwandeln, also habe ich einfach den Textinhalt von Jahr, Monat und Tag in int umgewandelt Typ zu beurteilen. Dies ist der Hintergrund.
Nachdem ich so viel gesagt habe, bin ich endlich zum Thema des Artikels gekommen. Wir wissen, dass der Gültigkeitszeitraum so ist: 2015-09-20, ohne zu zögern, und dann Ich habe die folgende Konvertierung unter Chrome durchgeführt. Ich bin sehr zufrieden und sie ist fertig.
Am Nachmittag kam die kleine Schwester, die es getestet hatte, zurück und sagte, dass es ein Problem bei der Beurteilung der Gültigkeitsdauer der Kreditkarte gäbe. Ich war ziemlich überrascht, egal wie ich es an meinem eigenen Gerät ausprobiert habe Kein Problem. Dann blieb mir nichts anderes übrig, als zum Schreibtisch der kleinen Schwester zu gehen, nebenbei etwas Öl aufzutragen und es tatsächlich zu starten. und jetzt habe ich endlich das Problem gefunden.
Als ich testete, installierte meine kleine Schwester IE8, und unter IE8 behandelte Parseint mein „09“ standardmäßig als Oktal, stellte jedoch fest, dass es kein zulässiges Oktal war, und warf schließlich den falschen Wert 0 aus. Wir haben auch gesehen, dass „09“ in Chrome standardmäßig als Dezimalzahl angezeigt wird, sodass die js-Engine es natürlich in 9 umwandelt, womit ich zufrieden bin. Der IE folgt also wirklich nicht dem gesunden Menschenverstand es lösen Wolltuch?
1: Lösung
<1> Ich habe gerade in der Diskussion festgestellt, dass parseInt in verschiedenen Browsern ein unterschiedliches Standardverhalten aufweist. Ich kann nicht erkennen, wie die zugrunde liegende Verarbeitung von Parseint gehandhabt wird Ich habe einen Blick auf das Javascript-API-Dokument geworfen und dann einen Basisparameter gefunden, der mich überrascht hat.
Wenn ich diese Basis kenne, kann das Problem einfach gelöst werden. Jetzt muss ich nur noch Basis = 10 angeben, wie im Bild gezeigt:
Später stellte sich jedoch heraus, dass unter IE9 die unterste Ebene von Parseint auch standardmäßig auf Dezimalzahl eingestellt ist, wenn Radix fehlt. Schließlich hat Microsoft die richtige Änderung vorgenommen, um dem Geschmack der Öffentlichkeit gerecht zu werden.
<2> Zusätzlich zur Parseint-Funktion gibt es tatsächlich eine Number-Funktion, die Ihnen bei der Lösung dieses Problems helfen kann, und unter IE7 und 8 gibt es kein Problem, denn in js, wenn Sie zu new gehen und nachsehen Wenn ja, können Sie ein Number-Objekt generieren. Dies unterscheidet sich etwas von C#, daher kann ich es unten auf zwei Arten betrachten.
Der Vorteil dieser Zahl besteht darin, dass sie nur Dezimalwerte verarbeiten kann, und es gibt andere spezielle Möglichkeiten, sie abzuspielen. Im Gegensatz zu Parseint, das nur Zeichenfolgenparameter akzeptiert, kann Zahl jeden Typ akzeptieren, wie zum Beispiel:
Da wir den zugrunde liegenden Quellcode von Number nicht sehen können, können wir uns an diese Probleme nur vom Hörensagen erinnern. Darin unterscheidet sich JS von anderen verwalteten Sprachen.