Il y a quelques jours, le site des cartes bancaires allait intégrer une nouvelle fonctionnalité, mais c'était vraiment délicat. Site Asp, tout le monde sait qu'il y a une date d'expiration au dos de la carte bancaire. , ces informations doivent être envoyées à la banque pour vérification. Après que l'utilisateur ait saisi vocalement la période de validité de la carte de crédit, le système effectuera un jugement sur la période de validité. Afin d'éviter des problèmes inutiles, il est jugé que la période de validité de la carte de crédit est réglée. le délai d'expiration ne doit pas être inférieur à un mois. Étant donné que l'année, le mois et le jour saisis sont dans trois zones de texte, j'ai également pensé qu'il était difficile de le convertir en temps, j'ai donc simplement converti le contenu du texte de l'année, du mois et du jour en entier. tapez pour juger. C’est le contexte.
Cela dit, j'arrive enfin au sujet de l'article. On sait que la durée de validité est la suivante : 20/09/2015 J'ai retiré "09" de la zone de texte du mois sans hésiter, et puis. caca. J'ai fait la conversion suivante sous chrome, je suis très content et c'est fait.
Dans l'après-midi, la petite sœur qui l'a testée est revenue et m'a dit qu'il y avait un problème pour juger de la durée de validité de la carte de crédit. J'ai été assez surprise. Peu importe comment je l'ai essayé sur ma propre machine, il y en avait. pas de problème. Ensuite, je n'ai pas eu le choix. Je n'ai pu que me rendre au bureau de la petite sœur pour le voir en personne, appliquer de l'huile en passant et le démarrer après le débogage avec le débogueur IE. Effectivement, un événement surnaturel s'est produit. et maintenant j'ai enfin trouvé le problème.
Lors de mes tests, ma petite sœur a installé IE8, et sous IE8, parseint traitait mon "09" comme octal par défaut, mais a constaté que ce n'était pas un octal légal et a finalement rejeté la fausse valeur de 0. Nous avons également vu que sous Chrome, "09" sera considéré comme décimal par défaut, donc le moteur js le convertira naturellement en 9, ce dont je suis satisfait. Donc, IE ne suit vraiment pas le bon sens humain. le résoudre Un drap de laine ?
1 : Solution
<1> J'ai également découvert dans la discussion que parseInt a un traitement de comportement par défaut différent dans différents navigateurs. Je ne vois pas comment le traitement sous-jacent de parseint est géré. le document javascript api. Je suis allé jeter un œil à la boîte noire, puis j'ai trouvé un paramètre radix qui m'a surpris.
Connaissant cette base, le problème peut être facilement résolu. Il ne me reste plus qu'à spécifier base=10, comme indiqué dans l'image :
Cependant, il a été découvert plus tard que sous IE9, la couche inférieure de l'analyse parseint est également définie par défaut sur la valeur décimale lorsque la base est manquante. Enfin, Microsoft a apporté la modification correcte pour répondre aux goûts du public.
<2> En plus de la fonction parseint, il existe en fait une fonction Number qui peut également vous aider à résoudre ce problème, et il n'y a aucun problème sur IE7 et 8, car dans js, si vous allez dans new et regardez à ce Number Si c'est le cas, vous pouvez générer un objet Number C'est quelque peu différent du C#, je peux donc le regarder de deux manières ci-dessous.
L'avantage de ce Number est qu'il ne peut gérer que des valeurs décimales, et il existe d'autres façons spéciales de le lire. Contrairement à l'analyse syntaxique qui n'accepte que les paramètres de chaîne, number peut accepter n'importe quel type, tel que :
Comme nous ne pouvons pas voir le code source sous-jacent de Number, nous ne pouvons nous souvenir de ces problèmes que par ouï-dire. C'est là que JS est différent des autres langages gérés.