Pourquoi ne puis-je pas utiliser toFixed sur un HTML de saisie de l'objet de valeur?
J'ai un HTML de l'élément d'entrée et je suis en train de forcer une seule décimale dans l'entrée une fois que l'utilisateur modifie la valeur. Donc, disons que l'utilisateur entre "4", je lance ce code:
this.value = this.value.toFixed(1)
mais puis-je obtenir une erreur JavaScript disant "Objet 4 n'a pas de méthode 'toFixed'".
Il semble que JavaScript est d'essayer de traiter un littéral comme un Nombre et de l'échec, mais, euh, pourquoi? Et comment puis-je l'éviter?
OriginalL'auteur Jeff Chausse | 2011-03-16
Vous devez vous connecter pour publier un commentaire.
this.value
est unString
lorsque vous l'obtenez à partir d'un élément d'entrée. Vous avez besoin de convertir un certain nombre avant de vous pouvez utiliser un certain nombre de méthodes:Alternativement, vous pouvez utiliser le unaire
+
opérateur de cast de la chaîne en nombre:Si vous avez besoin de retirer de la chaîne de suffixes, alors vous pouvez utiliser
parseFloat
:Cependant, il est intéressant de noter que
parseFloat
ne pas poignée hexadécimal formats lors de la coulée deNumber
ne:Il est très flexible, mais il peut seulement regarder les méthodes associées à l'objet en cours type.
toFixed
est utile si vous avez besoin d'une précision spécifique,parseFloat
/parseInt
sont utiles pour type/valeur de conversion.— Je pense que vous avez mal compris ma suggestion; je défends
this.value = parseFloat(this.value).toFixed(1);
Vide, vous avez raison, merci pour la correction.
OriginalL'auteur zzzzBov
convertir un Nombre premier,
this.value
est une Chaîne et d'une chaîne de ne pas avoir letoFixed
méthode.Number
constructeur est trop pour cela;parseFloat
est probablement la meilleure option.Vide,
Number()
n'est pas utilisé en tant que constructeur, il est utilisé pour effectuer un cast. contrairement aux scripts du serveur, le JS n'a pas autant d'une exigence de performance, et @Jeff Chausse ne spécifier qu'une certaine précision ce qui était souhaité, de sorte que la conversion d'un nombre serait adapté dans ce cas. Si une représentation numérique a souhaité, sans précision,parseFloat
serait certainement le chemin à parcourir.Si elle est utilisé en tant que constructeur n'est pas la question;
parseFloat
est conçu pour le but spécifique de convertir une chaîne en un nombre à virgule flottante et donc beaucoup de JS moteurs de l'optimiser en tant que tel (par exemple, en passant directement de la sous-fonction C).Number
ne bénéficient pas de telles optimisations parce qu'il a une portée plus large et doit passer par un certain nombre de contrôles de premier. Je ne suis pas sûr de ce que tu veux dire par "sans précision"... ceNumber
appel se traduit par un appel à la même méthode interne quiparseFloat
.OriginalL'auteur Anurag