Maison > interface Web > js tutoriel > À propos de la différence entre les types de données de base et les types de données de référence dans js

À propos de la différence entre les types de données de base et les types de données de référence dans js

一个新手
Libérer: 2017-10-24 09:20:08
original
1613 Les gens l'ont consulté

Pile et tas
La pile est un espace mémoire alloué automatiquement, qui est automatiquement libéré par le système ; tandis que le tas est une mémoire allouée dynamiquement, et sa taille est variable et ne sera pas automatiquement libérée.

Types de base et types de référence

Types de base : segments de données simples stockés dans la mémoire de la pile, la taille des données est déterminée et la taille de l'espace mémoire peut être allouée.

Les types de données de base incluent Undefined, Null, Boolean, Number et String, leurs valeurs sont stockées directement sur la pile

Type de référence : la valeur de l'objet stocké dans la mémoire tas ; , représenté par Le pointeur d'adresse est composé d'une valeur. L'adresse est stockée dans la pile et la valeur réelle est stockée dans le tas. La taille de chaque espace dans le tas est différente et des allocations spécifiques sont effectuées en fonction de la situation. . Lorsque nous avons besoin d'accéder à la valeur d'un type de référence (comme un objet, un tableau, une fonction, etc.), nous obtenons d'abord le pointeur d'adresse de l'objet à partir de la pile, puis obtenons les données requises à partir de la mémoire tas


 var s='str',t= 0,floatNum=1.1;
    var obj={
        a:10,
        b:'Joel',
        c:function(){
            console.log('function');
        }
    }
Copier après la connexion

js 基本数据类型引用数据类型内存分配

Comme indiqué ci-dessus :

Les valeurs de type de données de base sont stockées dans la pile et l'objet les références des types référence sont stockées dans la pile. Les valeurs sont stockées dans le tas

Résumé

Différentes allocations de mémoire lors de la déclaration de variables :

Types de base : données simples. segments stockés dans la pile, ils La valeur est stockée directement à l'emplacement où la variable est accédée. En effet, l'espace occupé par les types de base est fixe, ils peuvent donc être stockés dans une zone mémoire plus petite - la pile, afin que la valeur de la variable puisse être rapidement interrogée.

Type de référence : Objet stocké dans le tas. La valeur stockée dans la pile est un pointeur (point) utilisé pour pointer vers l'adresse mémoire de l'objet stocké. En effet, la taille de la valeur du type de référence sera. change , il ne peut donc pas être placé sur la pile, sinon cela réduira la vitesse de recherche des variables. Au contraire, la valeur stockée sur la pile est l'adresse de l'objet et la taille de l'adresse est fixe, donc son stockage sur la pile n'a aucun impact sur les performances variables.

Différents mécanismes d'allocation de mémoire entraînent également différents mécanismes d'accès

En javascript, l'accès direct aux objets stockés dans la mémoire tas n'est pas autorisé, donc lorsque vous accédez à un objet, accédez d'abord à la pile mémoire pour obtenir le adresse de l'objet dans le tas mémoire, puis suivez cette adresse pour obtenir la valeur dans l'objet C'est l'accès légendaire par référence, alors que la valeur du type de base est directement dans la pile mémoire.

Différences lors de la copie de variables

Types de base : lorsqu'une variable contenant la valeur d'origine est copiée dans une autre variable, une copie de la valeur d'origine sera attribuée à la nouvelle variable. deux Les variables sont complètement indépendantes, elles ont juste la même valeur.

Type de référence : lorsqu'une variable contenant l'adresse mémoire d'un objet est copiée dans une autre variable, l'adresse mémoire sera attribuée à la nouvelle variable, ce qui signifie que les deux variables pointent vers la mémoire du tas pour la même chose. objet, les modifications apportées par l’un d’eux seront reflétées dans l’autre. (Une chose à comprendre ici est que lors de la copie d'un objet, un objet identique ne sera pas généré dans la mémoire tas, mais il y aura une variable supplémentaire qui contient le pointeur vers l'objet.) Il y a un pointeur supplémentaire.

Différences dans le passage des paramètres (le processus de copie des paramètres réels vers des paramètres formels)

Les paramètres de toutes les fonctions dans ECMAScript sont transmis par valeur, mais pourquoi les types primitifs et les types de référence sont-ils impliqués ? il y a encore une différence quand la valeur de ? Ce n'est pas seulement dû à la différence d'allocation de mémoire.

Type de données de base : faites simplement une copie de la valeur dans la variable et transmettez-la au paramètre. Après cela, le paramètre et la variable n'ont aucune influence l'un sur l'autre.
Type de référence : étant donné que la valeur qu'il transmet est une adresse mémoire, ils pointent tous vers le même objet

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal