est écrit devant
Aujourd'hui, je veux vérifier les connaissances sur le type de Node. Je veux le résumer. J'ai vu un article sur Googol, mais le lien d'origine n'est plus là. Retirez cet article dans l'instantané. a des questions, s'il vous plaît contactez-moi!
Cet article concerne les bases de JS, les experts l'ignoreront automatiquement ! Je n'ai pas beaucoup écrit sur js auparavant, et je suis relativement faible dans ce domaine, j'ai donc également rencontré des problèmes lors de l'écriture de node. Je vais m'ajouter quelques connaissances ici !
Texte
Node.js est basé sur le langage de script JavaScript. Une caractéristique commune à la plupart des langages de script est la « frappe faible ».
Différent de PHP, PHP n'a pas besoin de déclarer une nouvelle variable même s'il possède une nouvelle variable, alors que JavaScript a toujours besoin de var pour la déclarer. Et cette variable couvre la signification de tous les types tels que int, string, char, etc. en C, même les fonctions.
Tout le contenu de cet article et des suivants est édité à l'aide de vim sous Linux ou Cygwin (sinon, veuillez le convertir selon votre propre méthode), puis affichez les résultats sur la ligne de commande.
Grammaire de base
Déclaration des variables
En C/C, on déclare des variables comme ceci :
```C
Et dans Node.js ça ressemble à ça :
```javascript
Ainsi, quel que soit le type de variable dont il s'agit, elle est résolue avec une var dans Node.js.
Instruction de boucle
pour…je
Cette instruction de boucle est fondamentalement la même que C/C, les deux sont
```C
Puisque Node.js est faiblement typé, vous n'avez besoin que de :
```javascript
Il s'agit d'une instruction de boucle post-typée, similaire au foreach de PHP.
Par exemple, nous avons un objet JSON comme suit :
javascript
À ce stade, nous pouvons utiliser for...in pour parcourir :
javascript
Si l'on saisit la commande suivante sur la ligne de commande :
Le contenu suivant sera affiché à l'écran :
Conseils : comme vous pouvez le voir ci-dessus, l'instruction for...in est utilisée pour parcourir les noms de clé des objets, tableaux et objets JSON, mais ne fournit pas de traversée des valeurs de clé. Si vous souhaitez obtenir la valeur de la clé, vous ne pouvez l'obtenir que sous la forme foo[ pendant… fais, fais…whill Je ne vais pas expliquer cela. Ce n'est pas très différent des autres langages, c'est juste que s'il y a une déclaration de variable, vous devez utiliser var. Opérateur , -, *, / C'est tout pour ces opérateurs. Ce à quoi vous devez faire attention, c'est . Il peut fonctionner à la fois sur des chaînes et sur des opérations numériques. Bien que les langages faiblement typés disent que le type est faible, les nombres peuvent parfois apparaître sous forme de chaînes, et les chaînes peuvent parfois apparaître sous forme de valeurs numériques. Cependant, lorsque cela est nécessaire, nous devons encore dire de quel type il s'agit. Nous pouvons utiliser le code suivant pour voir le résultat : Le parseInt ici est une fonction intégrée de Node.js, qui est utilisée pour analyser une chaîne dans une variable de type int. Le résultat de l'exécution du code ci-dessus est : Remarque : le premier résultat de console.log est 12. Puisque a est une chaîne, b est également ajouté par le système en tant que chaîne. Le résultat est que les deux chaînes sont collées ensemble et deviennent 12. Le deuxième résultat de console.log est 3 car nous avons converti le premier a en type int L'ajout de deux variables de type int est la somme des valeurs. Le résultat est bien sûr 3. ==, ===, !=, !== Une chose à expliquer ici est que lorsque la longueur de cet opérateur logique est 2 (==, !=), il détermine uniquement si les valeurs externes sont les mêmes, mais ne détermine pas le type. Comme Le résultat obtenu est vrai. Mais si nous ajoutons un signe égal au milieu du jugement, alors ce sera un jugement strict Ce n'est que lorsque le type et la valeur sont identiques que ce sera vrai, sinon ce sera faux. C'est à dire , le résultat renvoyé est faux, car a est de type int et b est une chaîne. Parlons d'ailleurs des instructions conditionnelles. En fait, si ici ce n'est pas différent des autres langages, il s'agit simplement de plusieurs opérateurs logiques, de deux signes égaux et de trois signes égaux. Je n’entrerai donc pas dans trop de détails. type de Ici, je vais le traiter comme un opérateur plutôt que comme une fonction. La fonction de cet opérateur est de déterminer le type d'une variable. Il renverra une chaîne, c'est-à-dire le nom du type. Vous pouvez le connaître en exécutant le code suivant : Le résultat de l'exécution ici sera : null, non défini, NaN En JavaScript, il existe trois valeurs spéciales, comme indiqué dans le titre. Le premier est peut-être familier à tout le monde. On le retrouve également en C/C, mais il est en majuscule. Son essence est un ```C définir NULL 0 En JavaScript, ces trois valeurs ont des significations différentes. ### nul ### null est un type spécial d'objet, ce qui signifie en gros vide. Par exemple : var a = nul; ### non défini ### Ce truc signifie que cette variable n'est pas déclarée. Afin de mieux distinguer null, notre exemple de code est le suivant : ```javascript Dans le code ci-dessus, nous rendons la valeur de a["foo"] vide, c'est-à-dire nulle. Et il n’y a aucune déclaration de a["bar"], elle n’est même pas vide. Tout le monde aurait dû deviner le résultat : NaN Il s'agit d'une valeur vide, un nombre spécial. Son nom complet est Not a Number. C'est un peu étrange. Vous pouvez le comprendre comme une variable de type numérique qui n'est pas sous forme numérique ou qui a une valeur incorrecte. Se produit principalement lorsque des erreurs d'opération numérique à virgule flottante (telles que la division par 0) se produisent. Il peut même s'agir de l'utilisateur lui-même qui crée une variable égale à NaN afin de renvoyer une valeur d'erreur pour que tout le monde sache que cette opération de fonction a ça a mal tourné. Petits abats Les autres instructions restantes sont similaires à d'autres langages existants, tels que break, switch, continue, etc. Type variable Cette section parle principalement des objets JavaScript, et les autres types seront presque ignorés. Type de base Node.js contient presque les types de base suivants : numéro javascript javascript Il faut parler des trois méthodes de création de tableau. Premier type : javascript Deuxième type : javascript javascript Personnellement, je préfère la troisième façon d'écrire, qui est plus concise. Objet JSON Ici, je sépare l'objet JSON au lieu de le classer comme objet JavaScript. Si vous pensez que je suis un peu trompeur, vous pouvez ignorer cette section directement. Ma distinction entre les objets JSON et les objets JavaScript réside dans le fait qu'ils sont uniquement utilisés pour stocker des données, plutôt que pour instancier une classe. En fait, l’essence de JSON est la notation d’objets JavaScript. Pour plus d'informations sur JSON, veuillez vous encyclopédie. Déclarer un objet JSON dans Node.js est très simple : javascript Il existe deux façons d'obtenir la valeur de clé d'un certain nom de clé dans l'objet JSON La première consiste à utiliser une connexion par points et la seconde consiste à utiliser des crochets : javascript Remarque : lorsque vous utilisez le point ci-dessus, il est directement suivi de la clé en JSON. Si vous traitez la clé comme une variable, vous ne pouvez l'essayer qu'avec dog[key] : vous pouvez maintenant l'essayer vous-même, utilisez The for. ...sous forme traverse l'objet JSON ci-dessus. N'oubliez pas d'utiliser typeof meow~ Bases des classes (objets) À proprement parler, une classe Node.js ne peut pas être considérée comme une classe. En fait, il s'agit simplement d'un ensemble de fonctions avec quelques variables membres. Son essence est en réalité une fonction. Mais par souci de simplicité, nous l'appellerons « classe » et l'instanciation comme « objet » dans la suite et dans le futur. Parce qu'une classe a de nombreuses caractéristiques de fonction, ou que son essence est une fonction, nous pouvons accidentellement expliquer ici les bases des fonctions. Déclaration et instanciation des classes Déclarer une classe, c'est très simple, ne riez pas : javascript Vrai ou faux ? ! réel. Vous n'y croyez pas ? Si vous n'y croyez pas, vous pouvez taper un morceau de code et y jeter un œil : javascript Et ce soi-disant foo() est en fait le constructeur de la classe foo(). Variables membres Il existe deux façons d’utiliser les variables membres. La première consiste à utiliser this. Remarque : ce n'est que lorsque ceci est ajouté qu'il s'agit d'une variable membre de la classe appelante, sinon ce n'est qu'une variable locale dans la fonction. Il faut distinguer la portée de la variable lorsqu'il n'y a pas de this. La deuxième méthode consiste à le déclarer en dehors du constructeur ou de toute fonction membre. Le format est javascript Peu importe la méthode ci-dessus qui est une déclaration de variables membres, nous pouvons voir l'effet : javascript Vous pouvez même modifier cette classe comme ceci : javascript Utilisez ensuite le code ci-dessus pour générer la sortie. Réfléchissez à la raison pour laquelle la production est toujours mondiale au lieu d'une soupe aux œufs. Constructeur Nous avons déjà dit que foo() est en fait un constructeur. Alors évidemment on peut passer des paramètres au constructeur, on a donc le code suivant : javascript On voit un jugement étrange ci-dessus if(hello === undefined). A quoi sert ce jugement ? La première possibilité est que le développeur a fait tout son possible pour transmettre un élément indéfini. À l'heure actuelle, il est compréhensible qu'il soit indéfini. Il y a une autre situation. Nous avons dit au début que JavaScript est un langage faiblement typé. En fait, il est non seulement faiblement typé, mais son passage de paramètres est également très lâche. Vous pouvez réussir plus ou moins (tant que vous pouvez vous assurer que le programme ne fait pas d'erreurs ou que la logique ne fait pas d'erreurs lorsque vous réussissez plus ou moins), en principe, tout va bien. Les paramètres transmis dans more seront automatiquement ignorés, tandis que les paramètres transmis dans less seront complétés par undefined. Regardez le code suivant pour comprendre : javascript Veuillez afficher vous-même les variables bonjour des deux barres, et vous constaterez que l'une est le monde et l'autre est la soupe aux œufs. Évidemment, lorsque notre première bar1 est déclarée, Node.js la voit automatiquement comme : javascript Il y a donc un dicton qui dit que c'est le monde. De plus, dans ce constructeur, nous voyons que le paramètre passé est bonjour, et il y a une variable membre dans cette classe appelée this.hello. Cependant, nous avons déjà dit que la portée est différente quand il y a ceci et sans cela. Le paramètre n'agit que dans le constructeur, et celui avec ceci est une variable membre. Son utilisation les distingue immédiatement, donc cela n'a pas d'importance même s'ils portent le même nom. Fonctions membres Déclaration de fonction membre La déclaration des fonctions membres est similaire à la deuxième méthode de déclaration des variables membres, c'est-à-dire javascript Le code ci-dessus est évident. Nous avons implémenté la fonction setHello de la classe foo, qui peut modifier la valeur de foo.hello. Mais n’est-ce pas un peu gênant d’écrire comme ça ? Je vais ensuite parler d'une fonctionnalité importante des fonctions JavaScript. ★ Fonction anonyme ★ Souvent, certaines de nos fonctions ne sont référencées ou appelées qu'à un seul endroit, il n'est donc pas intéressant et inutile pour nous de donner un nom à cette fonction, nous pouvons donc temporairement écrire cette fonction et laisser directement la personne qui y fait référence Les gens le citent, ceux qui l'appellent l'appellent. Par conséquent, le nom de la fonction peut être omis, tel que : javascript Quant à comment faire un devis ou appeler ? Si la classe ci-dessus doit être référencée, elle s'écrirait comme ceci : javascript Cette façon d'écrire a le même effet que la déclaration d'une fonction membre et permet d'économiser beaucoup de code. Et en fait, fondamentalement, la déclaration des fonctions membres de la classe est déclarée de cette manière anonyme. Quant à savoir comment appeler la fonction anonyme ? Ceci est généralement utilisé lors du passage d'une fonction qui n'est appelée que par une certaine fonction. Par exemple, nous avons une fonction dont le prototype est : javascript Par exemple, nous avons deux versions de la fonction de sortie, l'une est une sortie chinoise et l'autre est une sortie anglaise, alors si la fonction anonyme n'est pas utilisée, elle s'écrit comme ceci : javascript Exécutez ce code une fois, le résultat de sortie sera : La valeur de 1 2 est : 3 javascript Ce formulaire est généralement utilisé pour les fonctions de rappel. Le mécanisme de rappel est l'essence même de Node.js ou JavaScript. Il sera présenté dans les prochains chapitres. Méthode de déclaration de fonction anonyme de déclaration de fonction membre Bien que je l’ai évoqué dans la section précédente, parlons-en à nouveau. Habituellement, lorsque nous déclarons des fonctions membres d'une classe, nous utilisons des fonctions anonymes pour les déclarer, car cette fonction n'est de toute façon qu'une fonction membre de cette classe et ne sera pas référencée ou appelée séparément d'autres endroits, il y a donc ce qui suit Code : javascript De cette façon, nous faisons en sorte que la classe foo ait la fonction setHello. 2.3.4. Arbitraire des cours C'est encore une fois un non-sens de ma part. Le soi-disant caractère arbitraire des classes signifie que vous pouvez modifier votre classe n'importe où dans JavaScript, ce qui présente certaines similitudes avec Ruby. Par exemple, string est en fait une classe, avec des variables membres telles que length et des fonctions membres telles que indexOf et substr. Mais si nous pensons que cette chaîne est imparfaite à certains endroits et que nous souhaitons ajouter notre propre méthode, nous pouvons alors y ajouter une fonction où vous le souhaitez, telle que : javascript Le sens de cette fonction est de remplir une chaîne pour qu'elle devienne l'incarnation de qn. Testons-le : Vous obtiendrez ce résultat : sbsbsbsbs 3. Ci-joint 3.1. Copie profonde La soi-disant copie profonde signifie créer un nouveau tableau ou un nouveau objet par vous-même et copier manuellement les valeurs des variables de type de basedans le tableau ou l'objet source une par une, au lieu de simplement prendre la référence du tableau ou objet source. Cela implique donc un appel récursif ou quelque chose du genre. Ce qui suit est une fonction de copie approfondie que j'ai implémentée. Vous pouvez écrire la vôtre et l'ajouter à votre propre base de connaissances Node.js. javascript
var a = "1";
varb = 2;
console.log(a b);
console.log(parseInt(a) b);
12
3
var a = 1, b = "1";
console.log(a == b);
var a = 1, b = "1";
console.log(a === b);
fonction foo() {}
var a = 0;
var b = 'Chut~ Egg Drop Soup dort. ';
var c = 1,0;
var d = foo;
var e = { "a" : a };
var f = [ 1, 2, 3 ];
var g = nul;
var h = indéfini ;
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(typeof e);
console.log(typeof f);
console.log(typeof g);
console.log(typeof h);
numéro
chaîne
numéro
fonction
objet
objet
objet
indéfini
Tout le monde peut le comprendre, donc je ne vais pas trop l’expliquer. Mais contrairement à C/C, ce nul n’est pas égal à 0.
var une = {
"foo" : nul
};
console.log(a["foo"]);
console.log(a["bar"]);
nul
indéfini
chaîne
booléen
tableau
Parmi eux, les trois premiers types peuvent être directement affectés, et l'affectation du tableau n'est qu'une affectation de référence. Si une valeur est modifiée dans la nouvelle variable, la valeur de l'ancienne variable changera également. :
var foo = [ 1, 2, 3 ];
var bar = foo;
barre[0] = 3;
console.log(foo);
Le résultat obtenu est :
[ 3, 2, 3 ]
En d'autres termes, si un tableau copie un nouveau tableau, il ne peut pas utiliser l'affectation directe, mais doit effectuer une "copie complète".
var chien = new Array();
dog[0] = "Chut~";
dog[1] = "Soupe aux œufs";
chien[2] = "Dormir";
var dog = new Array( "Shh~", "Egg Drop Soup", "Sleeping" );
Le quatrième type :
var chien = [
"Chut~",
"Soupe aux œufs",
"Dormir"
];
var chien = {
"pre" : "Chut~",
"sous" : {
"name" : "Soupe aux œufs",
"agir" : "dormir",
"heure" : 12
},
"suf" : [ "J'ai dit", "C'est en train de dormir", "C'est juste en train de dormir" ]
};
chien
.pre;
chien["pre"];
fonction foo() {
//...
>
D'accord, nous avons écrit une classe foo.
var bar = new foo();
Qu'il s'agisse ou non d'une fonction, si elle est écrite sous cette forme (nouvelle), c'est une instanciation de cette classe.
javascript
fonction foo() {
This.hello = "monde";
>
fonction foo() {
//...
>
foo.prototype.hello = "monde";
var bar = new foo();
console.log(bar.bonjour);
fonction foo() {
This.hello = "monde";
>
foo.prototype.hello = "Soupe aux œufs";
//Code 2.1
fonction foo(bonjour) {
Si(bonjour === non défini) {
This.hello = "monde";
} autre {
This.hello = bonjour;
>
>
// Suite du code 2.1
var bar1 = nouveau foo();
var bar2 = new foo("Soupe aux œufs");
var bar1 = nouveau foo(indéfini);
// Suite du code 2.1
function setBonjour(bonjour) {
this.hello = bonjour;
>
foo.prototype.setHello = setHello;
bar1.setBonjour("Crêpes aux œufs");
fonction(bonjour) {
This.hello = bonjour;
>
foo.prototype.setHello = function(bonjour) {
This.hello = bonjour;
>
/**
* On passera en deux variables a et b,
* Après avoir calculé la valeur de a b, remettez-la à func(num)
* Aller à la sortie
*/
fonction sumab(a, b, func) {
var c = un b;
fonction(a, b, c);
>
fonction zh(a, b, somme) {
console.log(la valeur de a " " b " est : " somme );
>
fonction fr(a, b, somme) {
console.log(a " plus " b " est " somme );
>
sumab(1, 2, zh);
sumab(3, 4, fr);
3 plus 4 font 7
Si un tel code se présente sous la forme d'une fonction anonyme, ce sera :
sumab(1, 2, fonction(a, b, somme) {
console.log(la valeur de a " " b " est : " sum);
});
sumab(3, 4, fonction(a, b, somme) {
console.log(a " plus " b " est " somme );
});
// Suite du code 2.1
foo.prototype.setHello = function(bonjour) {
This.hello = bonjour;
>
String.prototype.sb = fonction() {
var newstr = "";
pour (var i = 0; i < this.length; i ) {
Si(i % 2 === 0) newstr = "s";
sinon newstr = "b";
>
Retourner la nouvelle ;
};
var str = "Chut~ La soupe aux œufs dort.";
console.log(str.sb());
Si vous dites à votre ordinateur "Chut ~ Egg Drop Soup dort.", votre ordinateur vous traitera d'idiot quatre fois et demie. (Écrasez-le vite)
fonction cloneObject(src) {
var dest = {};
pour (clé var dans src) {
if(typeof src === "object") dest[key] = cloneObject(src[key]);
sinon dest[clé] = src[clé];
>
retourner destination ;
>