Table des matières
Types de base et types de référence en js
js Types de base et types de référence dans
Maison interface Web js tutoriel Types de base et types de référence en js

Types de base et types de référence en js

Apr 10, 2018 pm 02:10 PM
javascript 引用 类型

Le contenu partagé avec vous dans cet article concerne les types de base et les types de référence en js. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer


Types de base et types de référence en js


Réimprimé de https://blog.csdn.net/shuidinaozhongyan/article/details/72520842
Type de base : Nombre, Chaîne ,Booléen,Null,indéfini.

Types de référence : Objet, Tableau, Date, RegExp, Fonction

La différence entre null et non défini.

Référence : http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

1. Similitude

1. En JavaScript, attribuer une variable à undefined ou null, pour être honnête, il n'y a presque aucune différence.

var a=null;  
var b=undefined;
Copier après la connexion
Copier après la connexion

2. undefined et null seront automatiquement convertis en false dans l'instruction if, et l'opérateur d'égalité signalera même directement qu'ils sont égaux.

if (!undefined) 
    console.log('undefined is false');// undefined is falseif (!null) 
    console.log(&#39;null is false&#39;);// null is falseundefined == null// true<span style="font-family:Georgia, serif;color:#111111;"><span style="font-size:16px;letter-spacing:-.12px;word-spacing:2.4px;background-color:rgb(245,245,213);"><strong>
</strong></span></span>
Copier après la connexion
Copier après la connexion

Le code ci-dessus illustre à quel point les comportements des deux sont similaires !

Puisque les significations et les utilisations de undefined et null sont similaires, pourquoi définir deux de ces valeurs en même temps n'augmente-t-il pas la complexité de JavaScript sans raison et ne gêne-t-il pas les débutants ? Le langage Dart, remplaçant du langage JavaScript développé par Google, stipule clairement qu'il n'y a que des nuls et aucun indéfini !

2.

Récemment, alors que je lisais le nouveau livre "Speaking JavaScript", j'ai découvert par hasard la réponse à cette question !

Il s'avère que cela est lié à l'histoire de JavaScript. Lorsque JavaScript est né en 1995, comme Java, il définissait initialement uniquement null comme valeur représentant « rien ».

Selon la tradition du langage C, null est conçu pour être automatiquement converti en 0.

Number(null)// 05 + null// 5
Copier après la connexion
Copier après la connexion

Cependant, Brendan Eich, le concepteur de JavaScript, estime que cela ne suffit pas, pour deux raisons.

Tout d'abord, null est traité comme un objet comme en Java. Cependant, les types de données JavaScript sont divisés en deux catégories : les types primitifs (primitifs) et les types composites (complexes). Brendan Eich estime qu'il est préférable que la valeur représentant "aucun" ne soit pas un objet.

Deuxièmement, la version initiale de JavaScript n'incluait pas de mécanisme de gestion des erreurs. Lorsqu'une incompatibilité de type de données se produit, le type est souvent automatiquement converti ou échoue silencieusement. Brendan Eich estime que si null est automatiquement converti en 0, il sera difficile de trouver des erreurs.

Par conséquent, Brendan Eich en a conçu un autre indéfini.

3. Conception initiale
La version initiale de JavaScript se distingue comme suit : null est un objet qui représente "aucun" et vaut 0 lorsqu'il est converti en une valeur numérique non définie ; une représentation de " La valeur originale de "Aucun" est NaN une fois convertie en valeur numérique.

Number(undefined)// NaN5 + undefined// NaN
Copier après la connexion
Copier après la connexion

4. Utilisation actuelle
Cependant, la distinction ci-dessus s'est rapidement révélée irréalisable dans la pratique. Actuellement, null et undefined sont fondamentalement synonymes, avec seulement quelques différences subtiles.

null signifie "aucun objet", c'est-à-dire qu'il ne devrait y avoir aucune valeur. L'utilisation typique est :

(1) En tant que paramètre d'une fonction, cela signifie que le paramètre de la fonction n'est pas un objet.

(2) sert de point final à la chaîne de prototypes d'objets.

Object.getPrototypeOf(Object.prototype)
// null

undefined signifie "valeur manquante", c'est-à-dire qu'il devrait y avoir une valeur ici, mais elle n'a pas encore été définie . L'utilisation typique est :

(1) Lorsqu'une variable est déclarée mais qu'aucune valeur ne lui est attribuée, elle est égale à indéfinie.

(2) Lors de l'appel de la fonction, le paramètre qui doit être fourni n'est pas fourni et le paramètre est égal à indéfini.

(3) L'objet n'a aucun attribut attribué et la valeur de cet attribut n'est pas définie.

(4) Lorsque la fonction ne renvoie pas de valeur, elle renvoie undéfini par défaut.

var i;
i // undefinedfunction f(x){console.log(x)}
f() // undefinedvar  o = new Object();
o.p // undefinedvar x = f();
x // undefined
Copier après la connexion
Copier après la connexion

Object est-il un type référence ?

 Object是一个基础类型,其他所有类型都从Object继承了基本行为。比如原型链中它的原型为null。
Copier après la connexion
Copier après la connexion

Quelle est la différence entre les types de référence et les types de base ? Lequel est sur le tas et lequel est sur la pile ?

1. Les variables de type de base sont stockées dans la zone de pile (la zone de pile fait référence à la mémoire de pile dans la mémoire)

Ensuite, sa structure de stockage est la suivante :

Types de base et types de référence en js

La zone de pile comprend l'identifiant de la variable et la valeur de la variable.

2.

Javascript est différent des autres langages. Il ne permet pas d'accéder directement à l'emplacement dans la mémoire, ce qui signifie que l'espace mémoire de l'objet ne peut pas. être directement manipulé. Ensuite, nous opérons Quoi ? En fait, il s'agit d'une référence à l'objet opérationnel,
donc la valeur du type référence est accessible par référence.
Pour être précis, le stockage des types de référence nécessite la zone de pile et la zone de tas de la mémoire (la zone de tas fait référence à la mémoire de tas dans la mémoire. La mémoire de la zone de pile stocke l'identifiant de variable et le pointeur). à l'objet dans la mémoire du tas
On peut aussi dire que c'est l'adresse de l'objet dans la mémoire du tas.
S'il y a les objets suivants :

var person1 = {name:&#39;jozo&#39;};var person2 = {name:&#39;xiaom&#39;};var person3 = {name:&#39;xiaoq&#39;};
Copier après la connexion
Copier après la connexion

, alors la situation de stockage de ces trois objets en mémoire est la suivante :

Types de base et types de référence en js

js Types de base et types de référence dans

Réimprimé de https://blog.csdn.net/shuidinaozhongyan/article/details/72520842
Types de base : Nombre, Chaîne, Booléen, Null, non défini.

Types de référence : Objet, Tableau, Date, RegExp, Fonction

La différence entre null et non défini.

Référence : http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

1. Similitude

1.在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别。

var a=null;  
var b=undefined;
Copier après la connexion
Copier après la connexion

2.undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。

if (!undefined) 
    console.log(&#39;undefined is false&#39;);// undefined is falseif (!null) 
    console.log(&#39;null is false&#39;);// null is falseundefined == null// true<span style="font-family:Georgia, serif;color:#111111;"><span style="font-size:16px;letter-spacing:-.12px;word-spacing:2.4px;background-color:rgb(245,245,213);"><strong>
</strong></span></span>
Copier après la connexion
Copier après la connexion

上面代码说明,两者的行为是何等相似!

既然undefined和null的含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加JavaScript的复杂度,令初学者困扰吗?Google公司开发的JavaScript语言的替代品Dart语言,就明确规定只有null,没有undefined!

二、

最近,我在读新书《Speaking JavaScript》时,意外发现了这个问题的答案!

原来,这与JavaScript的历史有关。1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。

根据C语言的传统,null被设计成可以自动转为0。

Number(null)// 05 + null// 5
Copier après la connexion
Copier après la connexion

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。

首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示”无”的值最好不是对象。

其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。

因此,Brendan Eich又设计了一个undefined。

三、最初设计
JavaScript的最初版本是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。

Number(undefined)// NaN5 + undefined// NaN
Copier après la connexion
Copier après la connexion

四、目前的用法
但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。

null表示”没有对象”,即该处不应该有值。典型用法是:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

Object.getPrototypeOf(Object.prototype)
// null

undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

var i;
i // undefinedfunction f(x){console.log(x)}
f() // undefinedvar  o = new Object();
o.p // undefinedvar x = f();
x // undefined
Copier après la connexion
Copier après la connexion

Object是引用类型嘛?

 Object是一个基础类型,其他所有类型都从Object继承了基本行为。比如原型链中它的原型为null。
Copier après la connexion
Copier après la connexion

引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?

1.基本类型的变量是存放在栈区的(栈区指内存里的栈内存)

那么它的存储结构如下图:

Types de base et types de référence en js

栈区包括了 变量的标识符和变量的值。

2.

javascript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,那我们操作啥呢? 实际上,是操作对象的引用,
所以引用类型的值是按引用访问的。
准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,
也可以说是该对象在堆内存的地址。
假如有以下几个对象:

var person1 = {name:&#39;jozo&#39;};var person2 = {name:&#39;xiaom&#39;};var person3 = {name:&#39;xiaoq&#39;};
Copier après la connexion
Copier après la connexion

则这三个对象的在内存中保存的情况如下图:

Types de base et types de référence en js

相关推荐:

JS引用类型的介绍

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 pm 02:54 PM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment créer un compte matriciel vidéo ? De quels types de comptes matriciels dispose-t-il ? Comment créer un compte matriciel vidéo ? De quels types de comptes matriciels dispose-t-il ? Mar 21, 2024 pm 04:57 PM

Avec la popularité des plateformes de vidéos courtes, le marketing de compte matriciel vidéo est devenu une méthode de marketing émergente. En créant et en gérant plusieurs comptes sur différentes plateformes, les entreprises et les particuliers peuvent atteindre des objectifs tels que la promotion de la marque, la croissance des fans et la vente de produits. Cet article explique comment utiliser efficacement les comptes matriciels vidéo et présente différents types de comptes matriciels vidéo. 1. Comment créer un compte vidéo matriciel ? Pour créer un bon compte Video Matrix, vous devez suivre les étapes suivantes : Tout d'abord, vous devez clarifier quel est l'objectif de votre compte Video Matrix, qu'il s'agisse de la communication de la marque, de la croissance des fans ou de la vente de produits. Avoir des objectifs clairs aide à développer des stratégies en conséquence. 2. Choisissez une plateforme : choisissez une plateforme de courtes vidéos appropriée en fonction de votre public cible. Les plateformes de courtes vidéos grand public actuelles incluent Douyin, Kuaishou, Huoshan Video, etc.

JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Quels sont les avantages des fonctions C++ renvoyant des types référence ? Quels sont les avantages des fonctions C++ renvoyant des types référence ? Apr 20, 2024 pm 09:12 PM

Les avantages des fonctions renvoyant des types référence en C++ incluent : Améliorations des performances : le passage par référence évite la copie d'objets, économisant ainsi de la mémoire et du temps. Modification directe : L'appelant peut modifier directement l'objet de référence renvoyé sans le réaffecter. Simplicité du code : le passage par référence simplifie le code et ne nécessite aucune opération d'affectation supplémentaire.

Comment utiliser la référence C++ et le passage de paramètres de pointeur ? Comment utiliser la référence C++ et le passage de paramètres de pointeur ? Apr 12, 2024 pm 10:21 PM

Les références et les pointeurs en C++ sont deux méthodes de transmission de paramètres de fonction, mais il existe des différences. Une référence est un alias pour une variable. La modification de la référence modifiera la variable d'origine, tandis que le pointeur stocke l'adresse de la variable. La modification de la valeur du pointeur ne modifiera pas la variable d'origine. Lorsque vous choisissez d'utiliser une référence ou un pointeur, vous devez prendre en compte des facteurs tels que la nécessité de modifier la variable d'origine, la nécessité ou non de transmettre une valeur nulle et les considérations de performances.

Comment obtenir facilement le code d'état HTTP en JavaScript Comment obtenir facilement le code d'état HTTP en JavaScript Jan 05, 2024 pm 01:37 PM

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service

See all articles