Share via


Copie, transmission et comparaison de données

La façon dont JScript copie, passe et compare les données est fonction du mode de stockage des données qui, lui-même, dépend du type des données. JScript stocke les données par valeur ou par référence.

Par valeur oupar référence

JScript copie, passe et compare les nombres et les valeurs booléennes (true et false) par valeur. Ce processus alloue un espace dans la mémoire de l'ordinateur et copie la valeur de l'original dans celle-ci. Toute modification apportée à la valeur d'origine n'affecte pas la copie (et inversement), car il s'agit d'entités distinctes. Deux nombres ou valeurs booléennes sont considérés égaux s'ils ont la même valeur.

JScript copie, passe et compare les objets, les tableaux et les fonctions par référence. Ce processus crée en fait une référence à l'élément d'origine et utilise la référence comme s'il s'agissait d'une copie. Toute modification apportée à l'original est répercutée sur ce dernier et sur la copie (et inversement). Il n'existe en fait qu'une entité ; la « copie » est simplement une autre référence aux données.

Pour qu'une comparaison par référence réussisse, les deux variables doivent faire référence à exactement la même entité. Par exemple, deux objets Array distincts ne seront jamais considérés comme égaux, même s'ils contiennent les mêmes éléments. En effet, l'une des variables doit être une référence à l'autre pour que la comparaison aboutisse. Pour vérifier si deux tableaux contiennent les mêmes éléments, comparez les résultats de la méthode toString().

Finalement, JScript copie et passe des chaînes par référence. Le type de comparaison appliqué aux chaînes varie selon que les chaînes sont des objets ou non. Deux objets String (créés avec new String ("chaîne")) sont comparés par référence. Si l'une des chaînes (ou les deux) est un littéral ou une valeur de chaîne primitive, elles sont comparées par valeur. Pour plus d'informations, consultez Assignations et égalité JScript.

Notes

Les jeux de caractères ASCII et ANSI sont conçus de telle sorte que les lettres majuscules précèdent les minuscules dans l'ordre de tri. Par exemple, « Zoo » est placé avant « aardvark ». Vous pouvez appeler toUpperCase() ou toLowerCase() sur les deux chaînes si vous voulez effectuer une comparaison qui ne tient pas compte de la casse.

Paramètres de fonction

Lorsque JScript passe un paramètre à une fonction par valeur, il effectue une copie distincte de ce paramètre, qui n'existe qu'à l'intérieur de la fonction. Même si des objets et des tableaux sont passés par référence, s'ils sont directement remplacés par une nouvelle valeur dans la fonction, cette nouvelle valeur n'est pas réfléchie en dehors de la fonction. Seules les modifications apportées aux propriétés des objets ou aux éléments des tableaux sont visibles en dehors de la fonction.

Par exemple, le programme suivant a deux fonctions : La première fonction remplace le paramètre d'entrée, ce qui empêche d'autres modifications apportées au paramètre d'affecter l'argument d'entrée d'origine. La seconde fonction modifie la propriété de l'objet sans remplacer l'objet.

function clobber(param) {
   // Overwrite the parameter; this will not be seen in the calling code
   param = new Object();
   param.message = "This will not work.";
}

function update(param) {
    // Modify the property of the object; this will be seen in the calling code.
    param.message = "I was changed.";
}

// Create an object, and give it a property.
var obj = new Object();
obj.message = "This is the original.";

// Call clobber, and print obj.message.
clobber(obj);
print(obj.message);

// Call update, and print obj.message.
update(obj);
print(obj.message);

Le résultat généré par ce code est le suivant :

This is the original.
I was changed.

Comparaison de données

JScript peut comparer les données par valeur ou par référence. Pour effectuer un test par valeur, JScript compare deux éléments distincts pour savoir s'ils sont égaux. En principe, cette comparaison est effectuée octet par octet. Lors d'un test par référence, il vérifie si deux éléments font référence au même élément. Si c'est le cas, ils sont considérés comme égaux dans le cadre de la comparaison. Sinon, même s'ils contiennent exactement les mêmes valeurs, octet par octet, ils ne sont pas considérés comme égaux.

Les chaînes peuvent être comparées par valeur ou par référence, selon que les chaînes sont des objets ou non. Si les deux chaînes sont des objets String, elles sont comparées par référence ; si ce n'est pas le cas, elles sont comparées par valeur. Cela permet de considérer deux chaînes comme égales si chacune a été créée séparément, mais qu'elles ont toutes deux le même contenu. Pour comparer les valeurs de deux objets String, commencez par convertir les objets en chaînes non-objet avec les méthodes toString ou valueOf, et ensuite comparez les chaînes résultantes. Pour plus d'informations, consultez Assignations et égalité JScript.

Voir aussi

Concepts

Assignations et égalité JScript

Liste des types de données

Autres ressources

Visite guidée du langage JScript

Fonctions JScript