Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
JavaScript est un langage orienté objet.
Un objet est une entité qui possède des propriétés et peut être manipulée avec des méthodes ;
Rappel : une méthode est une fonction spécifique à un type d'objet.
JavaScript propose nativement de nombreux modèles d'objets.
Ainsi le travail du développeur est simplifié. Pour prendre un seul exemple : une seule instruction suffit pour créer une date (un objet de type Date, on dit aussi créer des instances de Date). Le développeur web peut ensuite manipuler cette date avec toutes les méthodes existantes pour ce type d'objet.
Les objets de type array, map & set ont déjà été évoqués dans un chapitre précédent. Donc je n'y reviendrai pas
dans ce chapitre.
les collections de données en JS : array, map & set
la création littérale d'un objet Date n'est pas possible ; il faut impérativement recourir au constructeur Date().
J'utilise le "constructeur" Date() avec le mot réservé new pour créer de nouvelles "instances de Date.
N'oubliez pas le "D" majuscule à "Date" pour bien préciser qu'il s'agit d'un constructeur.
Le constructeur Date() sans argument retourne l'instant présent (date et heure actuelle).
Sinon il faut argumenter dans l'ordre : année, rangMois, rangJour, [heure, minute seconde]).
Dans la syntaxe ci-dessus les crochets encadrent les arguments facultatifs.
Attention le rang du mois doit être un entier compris entre 0 et 11. Donc pour "janvier" il faut saisir 0
et 1 pour février, 11 pour décembre !
L'argument de Date() peut être aussi un TimeStamp c'est à dire le nombre de millisecondes
depuis le 1er janvier 1970 à 0 heure.
Pour la dernière date, il n'y a pas affichage du "30 février 2024" (date qui n'exite pas) mais du 'Fri Mar 01 2024' (1er mars 2024)
Oui, le format d'affichage n'est pas très lisible pour un francophone, mais un peu de patience ...
De nombreuses méthodes peuvent s'appliquer à un objet de type date.
Console utilisée le samedi 4 juin 2022. :
> cejour = new Date() Sat Jun 04 2022 13:21:28 GMT+0200 (heure d’été d’Europe centrale) > cejour.getFullYear() 2022 > cejour.getDay() 6 > cejour.getMonth() 5 > cejour.getDate() 4 > cejour.getTime() 1654341688159 > cejour.getYear() 22 > cejour.getHours() 13 > cejour.getMinutes() 21 > cejour.getSeconds() 28
Ici on n'a pas passé d'argument au "constructeur" Date() donc l'objet cejour contient l'instant présent.
Nous avons donc utilisé des méthodes dites "getter" c'est à dire des méthodes pour récupérer des infos sur un objet date.
Il existe aussi les méthodes dites "setter" ; vous avez entre autres : setFullYear(), setMonth(), setDate(), setHours(), etc.
À chaque méthode "getter" correspond une méthode "setter".
Console du navigateur utilisée le dimanche 16 avril 2023 vers 22 heures :
>cejour = new Date() Sun Apr 16 2023 22:09:28 GMT+0200 (heure d’été d’Europe centrale) >cejour.toLocaleDateString() '16/04/2023' >cejour.toDateString() 'Sun Apr 16 2023' >cejour.toLocaleTimeString() '22:09:28'
Les méthodes toLocaleDateString() & toLocaleTimeString() sont intéressantes pour afficher une date ou une heure dans un format compréhensibles même pour un francophone.
La solution traditionnelle pour afficher les dates dans un format lisible pour un francophone consistait à utiliser
des 'arrays' (un tableau indicé avec la liste des mois, un autre avec la liste des jours en français).
Et bien cette solution est obsolète.
EMACScript16 propose en effet le constructeur Intl (comme International) pour créer rapidement des formats de dates OU
de nombres.
Pour créer un format de date il faut appliquer plus précisément la méthode DateTimeFormat() à ce
constructeur.
Essayez quand même ce script, pour vous familiariser avec les méthodes applicables à une date.
var mois = new Array("janvier", "février", "mars", "avril","mai",
"juin", "juillet", "aout","septembre", "octobre", "novembre", "décembre");
var jours = new Array("dimanche","lundi", "mardi", "mercredi", "jeudi",
"vendredi", "samedi");
var aujourdhui = new Date();
var annee = aujourdhui.getFullYear();
var rang_mois =aujourdhui.getMonth();
var nom_mois = mois[rang_mois]; // recherche dans le tableau "mois"
var jour = aujourdhui.getDate();
var type_jour =aujourdhui.getDay();
var nom_jour = jours[type_jour]; // recherche dans le tableau "jours"
document.write('Nous sommes le : ' + nom_jour + " " + jour + " " + nom_mois + " " + annee);
Le script sera alors :
... formatDate.format(aujourdhui) ... : appliquer le format "formatDate" à une date avec la méthode format()
Constatez que l'instant présent apparait sous un format très clair pour un francophone.
Le mois et le type de jour apparaissent sous forme textuelle car j'ai utilisé la valeur "long" pour les
propriétés month & weekday
Il y a beaucoup à dire sur les objets String.
Pour créer un objet de type string (ou chaine) vous pouvez utiliser le constructeur String mais en général on préfère utiliser la solution littérale : let/const nomVariable ="suite de caractères alphanumériques".
Attention, si la chaine contient une apostrophe il faut délimiter la chaine par des guillemets doubles à moins d'échapper l'apostrophe.
Exemples de chaines correctes :
let voyelles ='aeiouy'
let consonnes = "bcdfghjklmnpqrstvwxz"
let surnom = "l'emmerdeur"
let pseudo = 'l\'emmerdeur'
var message = new String("bonjour");
Toutes les chaines ci-dessus ont été créées de façon littérale sauf la dernière (créée avec le constructeur String().
Il est possible d'écrire une chaine sur plusieurs lignes à condition qu'elle soit délimitée par des
accents graves ("backquotes" en anglais).
Pour produire un "backquote" composez au clavier : altgr + 7
Si la chaine multilignes contient en son sein des accents graves, il faudra échapper ceux-ci (faire
précéder l'accent grave de \.
La méthode indexOf() possède un deuxième argument (facultatif) qui précise à partir de quelle position doit commencer
la recherche de la sous chaîne passée en premier argument.
Je vous rappelle que la méthode indexOf() retourne -1 si elle n'a pas trouvé la sous chaîne dans la chaîne.
Donc si la chaîne saisie comprend un arobase et un point après l'arobase alors les
variables rang_arobase et rang_point contiennent un entier supérieur à zéro.
Le rendu :
Emploi des méthodes indexOf() & include().
Le script devient alors :
...
mail.onblur = function()
{
var contenu = mail.value;
var rang = contenu.indexOf('@') ; // position de @
if (rang >=0 && contenu.includes('.' ,rang)) message = 'adresse mail correcte' ;
else message = 'adresse mail incorrecte';
document.getElementById('message').innerHTML = message ;
}
...
La méthode includes() retourne un booléen et admet en deuxième argument le rang de départ de la recherche.
Le rendu :
Vous pouvez aussi utiliser "l'artillerie lourde" : comparer la saisie à un objet de type RegExp.