Mon résumé d'une phrase: la valeur d'origine ne modifiera pas la valeur d'origine, qu'il s'agisse d'une affectation variable ou d'un laissez-passer de fonction. Qu'il s'agisse d'une affectation de variable ou d'un laissez-passer de fonction, si la nouvelle variable est réaffectée, elle n'affectera pas la valeur de référence d'origine. Si la nouvelle variable est une opération directe, elle affectera la valeur de référence d'origine.
Tout d'abord, il est clair que les valeurs et les types sont deux concepts différents. Par exemple, Null est la valeur unique du type nul, indéfini est la valeur unique du type non défini, et vrai et faux sont les deux seules valeurs de type booléen, etc. Dans n'importe quelle langue, le fonctionnement de la valeur peut être résumé dans les 3 aspects suivants.
Copier la valeur: c'est-à-dire attribuer la valeur à une nouvelle variable, ou attribuer la valeur à une autre variable, attribut ou élément de tableau via la variable.
Valeur de passage: c'est-à-dire passer la valeur en tant que paramètre à une fonction ou à une méthode.
Comparez les valeurs: c'est-à-dire comparer la valeur avec une autre valeur pour voir si elle est égale.
Étant donné que les valeurs des données de type de valeur et des données de référence ont des formes différentes, les méthodes de fonctionnement naturellement et les résultats produits sont également différents. Notez que lorsque la valeur est des données de type valeur, nous l'appelons souvent la valeur d'origine ou la valeur de base; Lorsque la valeur est référencée, nous l'appelons souvent la valeur référencée ou la valeur composite.
1. Utilisez les valeurs d'origine
Pour la valeur d'origine, les trois niveaux de son fonctionnement sont expliqués comme suit.
1) Copiez la valeur
Dans l'instruction Affectation, le processus d'opération produira une copie de la valeur réelle. Il n'y a aucun lien entre la valeur de la copie et la valeur réelle. Ils sont situés seuls dans différentes zones de pile ou des zones de tas. Cette copie peut stocker des variables, des propriétés des objets et des éléments de tableau. Par exemple:
var n = 123, a, b = [], c = {}; a = n; // Copiez le nombre 123 b [0] = n; // Copiez le nombre 123 Cx = n; // Copie le nombre 123 (a == b [0]) && (a == cx) && (b [0] == cx) && alert ("les valeurs copiées sont égales"); // détection que leurs valeurs sont égalesDans l'exemple ci-dessus, la valeur 123 est copiée à 3 copies de la variable A, du tableau B et de l'objet C respectivement. Bien que leurs valeurs soient égales, elles sont indépendantes les unes des autres.
2) passer la valeur
Lorsque vous transmettez une valeur à une fonction ou une méthode, la valeur passée n'est qu'une copie, pas la valeur elle-même. Par exemple, si vous modifiez la valeur passée dans une fonction, le résultat ne peut affecter que la copie de cette valeur de paramètre et n'affectera pas la valeur d'origine.
var a = 123; // la fonction de valeur d'origine f (x) {x = x + x; } f (a); // appelle la fonction pour modifier l'alerte de valeur passée (a); // Vérifiez si la valeur de la variable a est affectée. La valeur de retour est 123, indiquant qu'il n'y a pas de changement3) Valeur de comparaison
Dans l'exemple ci-dessus, nous pouvons également voir que lors de la comparaison des valeurs d'origine, une comparaison d'octets est effectuée pour déterminer si elles sont égales. Comparant les valeurs elles-mêmes, pas l'emplacement où sont les valeurs. Bien que les résultats de la comparaison puissent être égaux, cela signifie seulement que les informations d'octets qu'ils contiennent sont les mêmes.
2. Utiliser les valeurs de référence
Pour les valeurs de référence, les trois niveaux de leurs opérations sont expliqués comme suit.
1) Copiez la valeur
Dans l'instruction Affectation, la valeur attribuée est une référence à la valeur d'origine, pas à la copie de valeur d'origine, ni à la valeur d'origine elle-même. C'est-à-dire que, une fois l'affectation effectuée, la variable enregistre les références à la valeur d'origine (c'est-à-dire l'adresse de stockage de la valeur d'origine). Lorsqu'ils sont copiés entre plusieurs variables, éléments de tableau ou propriétés d'objet, ils seront tous les mêmes que les références enregistrées par la variable d'origine.
Toutes les références ont le même effet et la même fonction et peuvent être effectuées. Si les données sont modifiées par l'une des références, cette modification sera reflétée dans la valeur d'origine et d'autres références connexes. Par exemple:
var a = [1,2,3]; // Attribuez la référence du tableau b = a; // Copier la valeur b [0] = 4; // Modifiez la valeur du premier élément dans l'alerte de la variable B (A [0]); // retour 4, affichant que la valeur du premier élément de la variable a est également modifiée à 4
Cependant, si une nouvelle valeur est réaffectée à la variable B, la nouvelle valeur n'affectera pas le contenu de la valeur d'origine. Par exemple:
var a = [1,2,3]; // Attribuez la référence du tableau b = a; // Copier la valeur b = 4; // écraser l'alerte d'affectation (a [0]); // Le contenu de la variable A reste inchangé
Les affectations répétées portent réellement la référence d'une variable à la valeur d'origine, devenant une copie d'une autre valeur ou d'une référence. Par conséquent, il n'affectera pas la valeur d'origine et le diagramme de démonstration est illustré à la figure 4-2.
2) passer la valeur
Lorsqu'une référence est utilisée pour transmettre des données à une fonction, la fonction transmise à la fonction est également une référence à la valeur d'origine. La fonction peut utiliser cette référence pour modifier la valeur d'origine elle-même, et toute modification est visible en dehors de la fonction. Par exemple:
var a = [1,2,3]; fonction f (x) {x [0] = 4; // modifie la valeur du paramètre dans la fonction} f (a); // passe l'alerte de valeur de référence (a [0]); // retour 4, la valeur d'origine changeNotez que ce qui est modifié à l'intérieur de la fonction est une référence à un objet ou un tableau externe, et non à la valeur de l'objet ou du tableau lui-même. Vous pouvez utiliser une référence pour modifier les attributs d'un objet ou les éléments d'un tableau dans la fonction, mais si une nouvelle référence est utilisée à l'intérieur de la fonction pour écraser la référence d'origine, la modification à l'intérieur de la fonction n'affectera pas la valeur de la référence d'origine et ne peut pas être vue en dehors de la fonction.
var a = [1,2,3]; fonction f (x) {x = 4; // modifie la valeur du paramètre dans la fonction} f (a); // passe l'alerte de valeur de référence (a [0]); // Retour 1, la valeur d'origine ne changera pas3) Valeur de comparaison
Lorsque vous comparez deux valeurs de référence, les deux adresses de référence sont comparées pour voir si les valeurs d'origine qu'elles font référence sont la même copie, plutôt que si leurs valeurs d'origine sont des octets égaux. Lors de la référence à deux valeurs différentes, bien qu'ils aient la même composition d'octets, les valeurs des deux références ne sont pas égales.
var a = nouveau nombre (1); // Valeur de référence a var b = nouveau nombre (1); // Valeur de référence b var c = a; // attribue une référence à C alerte (a == b); // retourne false alert (a == c); // retourne vrai
Donc, {} == {}, [] == [], tous renvoient faux. Parce que l'adresse de référence est différente.
En bref, pour toute langue, l'utilisation des valeurs et l'utilisation de références sont deux méthodes de base de manipulation de données. Lorsque nous utilisons des données, la méthode doit être utilisée pour le traiter dépend principalement du type de données. Le type de valeur et les données de référence participent aux opérations sont différentes. Les données de type de valeur fonctionnent sur des données en utilisant des valeurs, tandis que les données de référence fonctionnent sur des données à l'aide de références. Différentes méthodes de calcul produisent également des résultats différents naturellement. Jetons un coup d'œil à un autre exemple:
var s = "ABC"; // chaîne, type de valeur data var o = nouvelle chaîne (s); // Objet String, Fonction de chaîne en boîte f (v) {// Fonction opérationnelle v.toString = function () {// Method ToString toString () return 123; }; } f (s); // passe la ou les alertes de valeur; // Renvoie la chaîne "ABC", indiquant que l'opération n'a pas affecté les données d'origine f (o); // passer l'alerte de référence (o); // renvoie la valeur 123, indiquant que l'opération a affecté la structure interne des données d'origineLe type de valeur participe à l'opération avec la valeur réelle, il n'a donc pas de connexion directe avec les données d'origine. Le type de référence participe à l'opération avec l'adresse de référence, et le résultat de calcul affectera le bloc de données de la zone du tas associé à l'adresse de référence. Cependant, il y a une exception. Pour les chaînes JavaScript, ses méthodes de fonctionnement sont relativement compliquées. Veuillez Google pour plus de détails!
L'article ci-dessus JavaScript Data Operation_a Brief Discussion sur l'essence du fonctionnement des valeurs d'origine et des valeurs de référence est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.