JavaScript est un langage magique. Il existe 5 façons de convertir des chaînes en nombres, chacune avec ses propres pièges !
Cet article présente 5 méthodes de conversion de chaînes JavaScript en nombres et leurs pièges. J'espère qu'il sera utile à tout le monde.
Il existe de nombreuses façons de convertir une chaîne en nombre, je pense à 5 !
parseInt(num); // 默认方式 (没有基数) parseInt(num, 10); // 传入基数 (十位数) parseFloat(num); // 浮点数 Number(num); // Number 构造器 ~~num; //按位非 num / 1; // 除一个数 num * 1; // 乘一个数 num -0 // 减去0 + num; // 一元运算符 "+"
Lequel choisir ? Quand le choisir ? Pourquoi choisir ce genre de chose ? Nous les passons en revue un par un et décomposons les pièges courants de chaque approche.
Selon les benchmarks de JsPerf.com, la plupart des navigateurs répondent mieux à parseInt. Bien que ce soit le moyen le plus rapide, l'utilisation de preseInt rencontrera certains pièges courants :
parseInt("08"); // returns 0 部分老浏览器. parseInt("44.jpg"); // returns 44
parseInt
: lorsqu'aucune base n'est transmise, la valeur par défaut est de transmettre une base de 10 parseInt(num, 10)
si vous ne le faites pas. Je ne connais pas le type de l'attribut num et n'utilise pas parseInt pour convertir des chaînes en nombres.
parseFloat
C'est une excellente option si vous n'analysez pas les nombres hexadécimaux. Par exemple :
parseInt(-0xff); // returns -255 parseInt("-0xFF"); // returns -255 parseFloat(-0xff); // returns -255 parseFloat("-0xFF"); // returns 0
Remarque : les chiffres hexadécimaux négatifs dans les chaînes sont un cas particulier, et si vous analysez avec parseFloat, le résultat sera incorrect. Pour éviter les situations NaN dans votre programme, vous devez vérifier la valeur convertie.
parseFloat("44.jpg"); // return 44
parseFloat
: Soyez prudent lors de la conversion de nombres hexadécimaux, n'utilisez pas parseFloat si vous ne connaissez pas le type d'objet que vous souhaitez convertir.
La notation bit à bit
peut convertir une chaîne en un entier, mais ce n'est pas un nombre à virgule flottante. S'il s'agit d'une conversion de chaîne, elle retournera 0;
~~1.23; // returns 1 ~~"1.23"; // returns 1 ~~"23"; // returns 23 ~~"Hello world"; // returns 0
Quel est le principe ? En retournant chaque bit, également connu sous le nom de complément A1 du nombre. Vous pouvez l'utiliser, mais notez qu'il ne peut être utilisé que pour stocker des entiers. Donc, en général, ne l'utilisez pas sauf si vous êtes sûr que le nombre est compris entre des entiers de 32 bits (en raison de la spécification de l'appel de ToInt32).
按位非
: utilisez ceci pour vous assurer qu'il n'y a aucun caractère dans l'entrée, uniquement pour les entiers.
Numéro
Le nombre a le même problème que la méthode de conversion mentionnée ci-dessus Lors de l'analyse, il essaie de trouver le numéro que vous lui avez donné. :
Number("023"); // returns 23 Number(023); // returns 19
Remarque : 023 est en fait un nombre octal, et peu importe comment vous le faites, il renvoie 19 ; il en va de même pour les nombres hexadécimaux sans guillemets simples ou doubles.
Le nombre est également l'un des plus lents de JsPerf.
Number
: Je ne l'utilise pratiquement pas.
Opérateur cloud unaire
"1.23" * 1; // returns 1.23 "0xFF" - 0; // returns 255 "0xFF.jpg" / 1 + // returns NaN "023"; // returns 23
L'opérateur unaire est différent des autres méthodes d'analyse S'il s'agit d'une valeur NaN, alors la valeur renvoyée est. NaN. C'est ma façon préférée de convertir des valeurs numériques car je ne pense pas qu'un objet contenant des caractères doive être traité comme 0 ou "deviné" en fonction du nombre de bits dont il dispose. J'utilise essentiellement l'opérateur +
car c'est moins déroutant. Bien que l'utilisation de -0
soit également bonne, elle n'exprime pas très bien l'intention initiale de conversion en nombres.
La meilleure façon de convertir une chaîne en nombre ?
Lors de la conversion d'une chaîne hexadécimale négative en nombre. Tout ce qui doit d'abord être converti en chaîne (par exemple via + ""
), puis analysé en un nombre à l'aide de l'opérateur unaire ou parseInt avec radix. Mais lorsque le résultat n’est pas une valeur NaN, il est plus approprié d’utiliser parseFloat.
Tutoriel recommandé : "Tutoriel JS"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!