● PHANTOM
🇼🇳 IN
✕
19 octobre 2023

JavaScript specials

Ce chapitre récapitule briÚvement les fonctionnalités de JavaScript que nous avons apprises à ce jour, en accordant une attention particuliÚre aux moments les plus subtils.

Structure du code

Les instructions sont délimitées par un point-virgule :

alert('Hello'); alert('World');

Habituellement, un saut de ligne est également traité comme un séparateur, de sorte que cela fonctionnerait également :

alert('Hello')
alert('World')

Cela s’appelle “insertion automatique de point-virgule”. Parfois, cela ne fonctionne pas, par exemple :

alert("Il y aura une erreur aprĂšs ce message")

[1, 2].forEach(alert)

La plupart des guides de style de code conviennent que nous devrions mettre un point-virgule aprÚs chaque déclaration.

Les points-virgules ne sont pas nécessaires aprÚs les blocs de code {...} et les constructions de syntaxe les utilisant comme des boucles :

function f() {
  // aucun point-virgule nécessaire aprÚs la déclaration de la fonction
}

for(;;) {
  // pas de point-virgule nécessaire aprÚs la boucle
}


 Mais mĂȘme si nous pouvons mettre un point-virgule supplĂ©mentaire quelque part, ce n’est pas une erreur. Ce sera ignorĂ©.

Plus d’informations dans : Structure du code.

Mode strict

Pour activer pleinement toutes les fonctionnalités de JavaScript moderne, nous devrions commencer les scripts avec "use strict".

'use strict';

...

La directive doit ĂȘtre au sommet d’un script ou au dĂ©but d’un corps de fonction.

Sans "use strict", tout fonctionne toujours, mais certaines fonctionnalitĂ©s se comportent Ă  l’ancienne, de maniĂšre “compatible”. Nous prĂ©fĂ©rons gĂ©nĂ©ralement le comportement moderne.

Certaines fonctionnalités modernes du langage (telles que les classes que nous étudierons dans le futur) activent implicitement le mode strict.

Plus d’informations dans : Le mode moderne, "use strict".

Variables

Peut ĂȘtre dĂ©clarĂ© en utilisant :

  • let
  • const (constant, ne peut pas ĂȘtre changĂ©)
  • var (Ă  l’ancienne, nous le verrons plus tard)

Un nom de variable peut inclure :

  • Lettres et chiffres, mais le premier caractĂšre ne peut pas ĂȘtre un chiffre.
  • Les caractĂšres $ et _ sont normaux, Ă  Ă©galitĂ© avec les lettres.
  • Les alphabets et les hiĂ©roglyphes non latins sont Ă©galement autorisĂ©s, mais ils ne sont gĂ©nĂ©ralement pas utilisĂ©s.

Les variables sont typĂ©es dynamiquement. Elles peuvent stocker n’importe quelle valeur :

let x = 5;
x = "John";

Il y a 8 types de données :

  • number pour les nombres Ă  virgule flottante et les nombres entiers,
  • bigint pour des nombres entiers de longueur arbitraire,
  • string pour les chaĂźnes de caractĂšres,
  • boolean pour les valeurs logiques : true/false,
  • null – un type avec une seule valeur null, signifiant “vide” ou “n’existe pas”,
  • undefined – un type avec une seule valeur undefined, signifiant “non assignĂ©â€,
  • object et symbol – pour les structures de donnĂ©es complexes et les identifiants uniques, nous ne les avons pas encore appris.

L’opĂ©rateur typeof renvoie le type d’une valeur, Ă  deux exceptions prĂšs :

typeof null == "object" // erreur dans le langage
typeof function(){} == "function" // les fonctions sont traitées spécialement

Plus d’informations dans : Les variables et Les types de donnĂ©es.

Interaction

Nous utilisons un navigateur comme environnement de travail. Les fonctions de base de l’interface utilisateur sont les suivantes :

prompt(question, [default])
Posez une question et retournez soit ce que le visiteur a entrĂ©, soit null s’il clique sur “cancel”.
confirm(question)
Posez une question et suggérez de choisir entre Ok et Annuler. Le choix est retourné comme true/false.
alert(message)
Affiche un message.

Toutes ces fonctions sont modales, elles suspendent l’exĂ©cution du code et empĂȘchent le visiteur d’interagir avec la page tant qu’il n’a pas rĂ©pondu.

Par exemple :

let userName = prompt("Your name?", "Alice");
let isTeaWanted = confirm("Do you want some tea?");

alert( "Visitor: " + userName ); // Alice
alert( "Tea wanted: " + isTeaWanted ); // true

Plus d’informations dans : Interaction: alert, prompt, confirm.

Operateurs

JavaScript prend en charge les opérateurs suivants :

Arithmétique

Regulier : * + - /, aussi % pour le reste et ** pour la puissance d’un nombre.

Le binaire plus + concatĂšne des chaĂźnes de caractĂšres. Et si l’un des opĂ©randes est une chaĂźne de caractĂšres, l’autre est Ă©galement converti en chaĂźne de caractĂšres :

alert( '1' + 2 ); // '12', string
alert( 1 + '2' ); // '12', string
Affectations

Il y a une assignation simple : a = b et des combinés comme a *= 2.

Bitwise

Les opérateurs au niveau du bit fonctionnent avec des entiers 32 bits au niveau du bit le plus bas : voir la doc quand ils sont nécessaires.

Conditionnel

Le seul opérateur avec trois paramÚtres : cond ? resultA : resultB. Si cond est vrai, retourne resultA, autrement resultB.

Opérateurs logiques

ET logique && et OU || effectuent une Ă©valuation en circuit court puis renvoyent la valeur lĂ  oĂč ils se sont arrĂȘtĂ©s (pas nĂ©cessairement true/false). NOT logique ! convertit l’opĂ©rande en type boolĂ©en et retourne la valeur inverse.

L’opĂ©rateur de coalescence des nuls

L’opĂ©rateur ?? permet de choisir une valeur dĂ©finie dans une liste de variables. Le rĂ©sultat de a ?? b est a sauf s’il est null/undefined, alors b.

Comparaisons

Le contrĂŽle d’égalitĂ© == pour les valeurs de types diffĂ©rents les convertit en un nombre (sauf null et undefined, Ă©gales entre elles et rien d’autre), elles sont donc Ă©gales :

alert( 0 == false ); // true
alert( 0 == '' ); // true

D’autres comparaisons sont Ă©galement converties en nombre.

L’opĂ©rateur d’égalitĂ© stricte === ne fait pas la conversion : diffĂ©rents types signifient toujours diffĂ©rentes valeurs pour lui.

Les valeurs null et undefined sont spĂ©ciales: elles sont Ă©gales == les unes aux autres et n’égalent rien d’autre.

Les comparaisons supérieures/inférieures comparent des chaßnes caractÚre par caractÚre, les autres types sont convertis en nombre.

Autres opérateurs

Il y en a quelques autres, comme un opérateur de virgule.

Plus d’informations dans : OpĂ©rateurs de base, mathĂ©matiques, Comparaisons, OpĂ©rateurs logiques.

Boucles

  • Nous avons couvert 3 types de boucles :

    // 1
    while (condition) {
      ...
    }
    
    // 2
    do {
      ...
    } while (condition);
    
    // 3
    for(let i = 0; i < 10; i++) {
      ...
    }
  • La variable dĂ©clarĂ©e dans la boucle for(let ...) est visible uniquement Ă  l’intĂ©rieur de la boucle. Mais nous pouvons aussi omettre let et rĂ©utiliser une variable existante.

  • Les directives break/continue permettent de sortir complĂštement de la boucle / de l’itĂ©ration en cours. Utilisez des labels pour rompre les boucles imbriquĂ©es.

Details dans : Boucles : while et for.

Plus tard, nous étudierons plus de types de boucles pour traiter des objets.

La construction “switch”

La construction “switch” peut remplacer plusieurs vĂ©rifications if. Il utilise === (Ă©galitĂ© stricte) pour les comparaisons.

Par exemple :

let age = prompt('Your age?', 18);

switch (age) {
  case 18:
    alert("Won't work"); // le résultat de prompt est une chaßne de caractÚres, pas un nombre

  case "18":
    alert("This works!");
    break;

  default:
    alert("Any value not equal to one above");
}

Details dans : La déclaration "switch".

Fonctions

Nous avons couvert trois maniÚres de créer une fonction en JavaScript :

  1. Déclaration de fonction: la fonction dans le flux de code principal

    function sum(a, b) {
      let result = a + b;
    
      return result;
    }
  2. Expression de fonction : fonction dans le contexte d’une expression

    let sum = function(a, b) {
      let result = a + b;
    
      return result;
    };
  3. Fonctions fléchées :

    // expression Ă  droite
    let sum = (a, b) => a + b;
    
    // ou une syntaxe multiligne avec {...}, il faut return ici :
    let sum = (a, b) => {
      // ...
      return a + b;
    }
    
    // sans arguments
    let sayHi = () => alert("Hello");
    
    // avec un seul argument
    let double = n => n * 2;
  • Les fonctions peuvent avoir des variables locales: celles dĂ©clarĂ©es dans son corps ou sa liste de paramĂštres. Ces variables ne sont visibles qu’à l’intĂ©rieur de la fonction.
  • Les paramĂštres peuvent avoir des valeurs par dĂ©faut : function sum(a = 1, b = 2) {...}.
  • Les fonctions retournent toujours quelque chose. Si aucune instruction return n’est renvoyĂ©e, le rĂ©sultat est undefined.

Details : voir Fonctions, Fonctions fléchées, les bases.

Plus Ă  venir

C’était une brĂšve liste de fonctionnalitĂ©s de JavaScript. Pour l’instant, nous n’avons Ă©tudiĂ© que les bases. Plus loin dans le tutoriel, vous trouverez plus de fonctionnalitĂ©s spĂ©ciales et avancĂ©es de JavaScript.

Carte du tutoriel

Commentaires

lire ceci avant de commenter

  • Si vous avez des amĂ©liorations Ă  suggĂ©rer, merci de soumettre une issue GitHub ou une pull request au lieu de commenter.
  • Si vous ne comprenez pas quelque chose dans l'article, merci de prĂ©ciser.
  • Pour insĂ©rer quelques bouts de code, utilisez la balise <code>, pour plusieurs lignes – enveloppez-les avec la balise <pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepen
)