ECMAScript est la spécification qui définie la structure standard d'un langage de script.
;
//
/* */
if … else, for, while, +, *, =, …
Variables faiblement typées, on ne donne pas explicitement un type comme en C++
7, 2.5, 'allo', true, ['a', 'b', 'c'], [7, 'allo', true]
'5' + 2 + 3; // = 523 → '5' + '2' + '3'
2 + 3 + '5'; // = 55 → (2 + 3) + '5' → 5 + '5' → '5' + '5'
5 + Number('5'); // = 10 → on peut convertir les variables: Number(), String(), Boolean()
let name = 'James';
name = 7; // pas de problème, name peut contenir n’importe quel type
let message = `Valeur: ${name}`; // 'Bonjour 7' => avec les backtick, ${interpolation}
typeof(name), isNaN(name), Array.isArray(name), Number.isInteger(name)
function doSomething(value) {
if (value) {
let message = 'There is a value'; // LET
console.log(message); // ok
}
console.log(message); // ERREUR
}
function doSomething(value) {
if (value) {
var message = 'There is a value'; // VAR
}
console.log(message); // ok
}
console.log('allo');
console.table(['a', 'b', 'c']);
// Avec une variable
let name = 'James';
console.log(name);
// ou une interpolation
console.log(`Bonjour ${name}`);
// Un programme JavaScript n'a pas de fonction main
// Il est exécuté de haut en bas
// -----------------------------------------------
// Sortie a la console
//
console.log('Bonjour!');
// -----------------------------------------------
// Variables
//
console.log();
let uneVariable = 42;
console.log(uneVariable);
uneVariable += 10;
// uneVariable = uneVariable + 10
console.log(uneVariable);
const uneConstante = 'Je ne change pas!';
console.log(uneConstante);
// uneConstante = 'Ah oui?';
// Erreur, impossible d'assigner une NOUVELLE valeur a une const
// -----------------------------------------------
// Types
//
console.log();
console.log(`2 => ${typeof(2)}`); // 'number'
console.log(`2.2 => ${typeof(2.2)}`); // 'number'
console.log(`true => ${typeof(true)}`); // 'boolean'
console.log(`'true' => ${typeof('true')}`); // 'string'
console.log(`'2' => ${typeof('2')}`); // 'string'
console.log(`'allo' => ${typeof('allo')}`); // 'string'
// Convertir en nombre
console.log();
console.log(Number(42)); // 42
console.log(Number('8')); // 8
console.log(Number(true)); // 1
console.log(Number('ahoy')); // NaN
console.log();
// Donc est-ce qu'une valeur est un nombre?
const valeur = 'bonjour';
console.log(valeur);
console.log(`valeur == NaN => ${valeur == NaN}`);
const valeurConversion = Number(valeur);
console.log(valeurConversion);
console.log(`valeurConversion == NaN => ${valeurConversion == NaN}`);
// Hein?
console.log(`NaN == NaN => ${NaN == NaN}`);
// !!! https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN#description
console.log(`isNaN(valeur) => ${isNaN(valeur)}`);
console.log(`isNaN(valeurConversion) => ${isNaN(valeurConversion)}`);
// Donc, 'bonjour' n'est pas un nombre ET ne peut pas etre converti en nombre
// NaN
// isNaN() indique si n'est PAS un nombre et ne peut pas être CONVERTI en nombre
console.log();
console.log(`4 NaN? => ${isNaN(4)}`); // false
console.log(`4.4 NaN? => ${isNaN(4.4)}`); // false
console.log(`'4' NaN? => ${isNaN('4')}`); // false
console.log(`'bonjour' NaN? => ${isNaN('bonjour')}`); // true
// Entier
console.log();
console.log(`6 int? => ${Number.isInteger(6)}`); // true
console.log(`6.6 int? => ${Number.isInteger(6.6)}`); // false
console.log(`'6' int? => ${Number.isInteger('6')}`); // false
console.log(`'6' int? + conversion => ${Number.isInteger(Number('6'))}`); // true
// Tableau
console.log();
console.log(`[1, 2, 3] => ${typeof([1, 2, 3])}`); // object
console.log(`[1, 2, 3] array? => ${Array.isArray([1, 2, 3])}`); // true
// -----------------------------------------------
// Fonctions
//
console.log();
// Declarer la fonction
function uneFonction() {
console.log('Bonjour fonction!');
}
// Appeler la fonction
uneFonction();
// Recevoir des parametres
function uneFonctionAvecParams(message = 'par defaut') {
console.log(`message = ${message}`);
if (typeof(message) == 'string') {
// Interpolation avec les backtick ``
// on injecte les variables dans la string avec ${maVariable}
const affichage = `Bonjour: ${message}`;
console.log(affichage);
} else {
console.log('Le message n\'est PAS une string!');
}
}
// Envoyer des parametres
uneFonctionAvecParams('Un param');
uneFonctionAvecParams(42);
// Il y a une valeur par defaut au param dans la fonction
uneFonctionAvecParams();
// -----------------------------------------------
// Tableaux
//
console.log();
let unTableau = []; // Tableau vide
// On peut mettre des valeurs a l'initialisation
// = [0, 1, 1, 2, 3, 5 ]
unTableau.push(1);
unTableau.push('a');
unTableau.push('3');
unTableau.push(true);
unTableau.push(5);
console.log(unTableau);
console.log(unTableau.length);
// Affichage tableau
console.table(unTableau);
// Recuperer une valeur
let premierItem = unTableau[0];
console.log(premierItem);
// Modifier une valeur
unTableau[0] = 2;
console.table(unTableau);
//
// Parcourir un tableau
//
unTableau = [1, 2.5, 'a', true, '7', '4.5']
// unTableau = 'patate';
if (Array.isArray(unTableau)) {
for(let i = 0; i < unTableau.length; i ++) {
const valeur = unTableau[i];
const nombre = Number(valeur);
console.log(`index ${i} = ${valeur}`);
if (isNaN(nombre) == false && typeof(valeur) != 'boolean') {
// Un boolean est equivalent aux nombre 0 ou 1 pour vrai ou faux
let typeNombre = 'FLOAT';
if (Number.isInteger(nombre)) {
// isInteger doit être utilisé sur un Number, sinon retournera toujours faux
typeNombre = 'INT';
}
console.log(`\tNombre ${typeNombre}`);
console.log(`\t${nombre + 100}`);
// On peut évaluer une EXPRESSION dans l'interpolation
}
}
} else {
console.log('PAS un tableau');
}