Contrainte dans JScript
Mise à jour : novembre 2007
JScript peut effectuer des opérations sur des valeurs de différents types sans que le compilateur ne génère une exception. Le compilateur JScript change en fait automatiquement l'un des types de données et lui attribue le type de l'autre (force sa conversion), puis il effectue l'opération. D'autres langages sont régis par des règles beaucoup plus strictes en matière de contrainte (conversion).
Détails de contrainte
Le compilateur autorise toutes les contraintes à moins qu'il puisse prouver que celle-ci échouera toujours. Toute contrainte susceptible d'échouer génère un avertissement au moment de la compilation et beaucoup produisent une erreur d'exécution si la conversion échoue. Par exemple :
Opération |
Résultat |
---|---|
Additionner un nombre et une chaîne |
Le nombre est converti en chaîne. |
Additionner une valeur booléenne et une chaîne |
La valeur booléenne est convertie en chaîne. |
Additionner un nombre et une valeur booléenne |
La valeur booléenne est convertie en nombre. |
Prenons l'exemple suivant.
var x = 2000; // A number.
var y = "Hello"; // A string.
x = x + y; // the number is coerced into a string.
print(x); // Outputs 2000Hello.
Pour convertir explicitement une chaîne en entier, vous pouvez utiliser la méthode parseInt. Pour plus d'informations, consultez parseInt, méthode. Pour convertir explicitement une chaîne en nombre, vous pouvez utiliser la méthode parseFloat. Pour plus d'informations, consultez parseFloat, méthode. Notez que les chaînes sont converties automatiquement en nombres équivalents pour les besoins d'une comparaison, mais sont conservées sous forme de chaînes pour l'addition (concaténation).
Dans la mesure où JScript est aussi un langage fortement typé, vous disposez d'un autre mécanisme de contrainte. Le nouveau mécanisme utilise le nom du type cible comme s'il représentait une fonction qui accepte l'expression à convertir comme argument. Il peut être utilisé pour tous les types de données primitives JScript, les types de données de référence et les types de données du .NET Framework.
Dans l'exemple suivant, le code convertit un entier en valeur booléenne :
var i : int = 23;
var b : Boolean;
b = i;
b = Boolean(i);
Dans la mesure où la valeur de i est autre que zéro, b est true.
Ce nouveau mécanisme de contrainte fonctionne également avec de nombreux types définis par l'utilisateur. Toutefois, il est possible que certaines conversions vers ou à partir de types définis par l'utilisateur ne fonctionnent pas parce que JScript interprète de façon incorrecte l'intention de l'utilisateur lors de la conversion de types différents. C'est notamment le cas lorsque le type à convertir comprend plusieurs valeurs. Dans l'exemple suivant, le code crée deux classes (types). L'une contient une variable unique i qui est un entier. L'autre contient trois variables (s, f et d), chacune de type différent. Dans l'instruction finale, il est impossible pour JScript de déterminer comment convertir une variable du premier type en une variable du second type.
class myClass {
var i : int = 42;
}
class yourClass {
var s : String = "Hello";
var f : float = 3.142;
var d : Date = new Date();
}
// Define a variable of each user-defined type.
var mine : myClass = new myClass();
var yours : yourClass;
// This fails because there is no obvious way to convert
// from myClass to yourClass
yours = yourClass(mine);
Voir aussi
Concepts
Contrainte par les opérateurs de bits