Animée par Charles Jacquin
Il existe plusieurs type de variables :
var foo = 'bar'; // string
var account = 1; // number
var isAuthenticated = true; //boolean
console.log(typeof foo); //typeof permet de retrouver le type d'une variable
va foo = 'bar' + 'anOtherString';
var result = 2 * 5;
result = 'foo';
Le type de la variable est determiné au runtime
var myAge = 45,
otherAge = 23,
sameAge = 45;
var isOlder = myAge > otherAge; // isOlder => true
var isOlder = myAge >= otherAge;
var isYounger = myAge < otherAge; //isYounger => false;
var isYounger = myAge <= otherAge;
var isSameAge = myAge == sameAge; isSameAge => true
var foo = 'bar' + 4; bar4
var result = 2 + true; 3
Pour comparer deux variables javaScript convertit ces dernières de manière implicite.
Les number sont converti en string, tandis que les boolean sont convertis en number (1 ou 0).
Pour obtenir une vraie comparaison, nous utiliserons l'opérateur ===.
var isTrue = '1' == 1;
var isFalse = '1' === 1;
permet d'executer du code si une condition est remplie.
var myAge = 45,
otherAge = 34;
if(myAge >= otherAge){
//faire quelque chose si je suis plus vieux
}else{
//faire autre chose si je suis plus jeune
}
Il est possible de chainer les conditions à l'aide des opérateurs || (ou) && (et)
var myAge = 45,
otherAge = 34;
if(myAge >= otherAge && myAge != 19){
//faire quelque chose si je suis plus vieux et que je n'ai pas 19 ans
}
A utiliser dans les situations ou nous avons beaucoup de cas possibles.
var myAge = 25;
switch(myAge){
case 25:
//faire quelque chose
break;
case 18:
//encore autre chose
break;
default:
//comportement par defaut
break;
}
Plus performant que l'equivalent à base de if else if
Permet de reépéter un traitement, tant que la condition fournis est vraie.
Il faut donc s'arranger pour que la condition devienne fause pour pouvoir sortir de la boucle.
var myAge = 1;
while(myAge < 18){
//faire quelque chose
myAge++;
}
Do while fonctionne de la même façons que while, sauf que le traitement sera exécuté au moins une fois.
var myAge = 19;
while(myAge < 18){
//faire quelque chose
myAge++;
}
//le traitement ne sera jammais éxécuté
do {
myAge++
} while (myAge < 18)
//le traitement ne sera éxécuté une seule fois
La boucle for est composée de trois bloc.
Elle permet de répéter un traitement un nombre de fois donné.
for(var i = 0; i < 10; i++){
//faire quelque chose
}
//cette boucle se répétera 10 fois;
break et continue sont des mot clé qui permettent d'interrompre ou de modifier le comportement de la boucle.
for(var i = 0; i < 10; i++){
if(i === 5)
continue;
console.log(i);
}
//affiche 0 1 2 3 4 6 7 8 9
for(var i = 0; i < 10; i++){
if(i === 5)
break;
console.log(i);
}
//affiche 0 1 2 3 4
continue permet d'interompre l'itération courante et de passer à la suivante.
break interomp purement et simplement la boucle.
Une fonction est une suite d'instructions pouvant être appelé plusieurs fois.
function sayHello(){
console.log('Hello');
}
sayHello();
Nous pouvons fournir un ou plusieurs paramètre à la fonctions.
function sayHello(name){
console.log('Hello ', name);
}
sayHello('john snow')
Les fonctions peuvent retoruner une valeur,
pour cela il suffit d'utiliser le mot clef "return".
function multiply(firstInput, secondInput){
return firstInput * secondInput;
}
var result = multiply(10, 5);
console.log(result);
En JavaScript les fonctions sont des objets de première classe.
var myFunction = function(){
//faire quelque chose
}
myFunction();
Ce qui veux dire que nous pouvons assigner une fonction à une variable
Les mots clef "try", "catch" et "throw" permettent de gérer les erreurs.
function multiply(firstInput, secondInput){
if( typeof firstInput != 'number' || typeof secondInput != 'number' )
throw 'invalid inputs';
return firstInput * secondInput;
}
try{
var result = multiply(10, 5);
console.log(result);
} catch (error){
console.error(error);
}
Une variable déclarée à la racine du script peut être utilisée n'import ou, elle fait partie du scope global.
var globalVar = 'foo';
function(){
var scopedVar = 'bar';
console.log(globalVar, scopedVar);
}
console.log(globalVar, scopedVar);
Une variable déclarée dans une fonction ne peut être utiliser qu'à l'intérieur de cette fonction
Un objet est un ensemble de propriétés et une propriété est une association entre un nom (aussi appelé clé) et une valeur.
var myUser = {
firstName: 'john',
lastName: 'snow',
email: 'johny@winterfell.org'
}
console.log(myUser.firstName);
firstName et lastName sont des propriété de l'objet myUser.
Pour accéder à la valeur d'une propriété, il suffit d'utiliser le "."
var myUser = {
firstName: 'john',
lastName: 'snow',
email: 'johny@winterfell.org',
saySomething: function(){
console.log('winter is coming');
}
}
myUser.saySomething();
Lorsqu'une propriété de notre objet est une fonction, on parle de méthode.
var myUser = {
firstName: 'john',
lastName: 'snow',
email: 'johny@winterfell.org',
saySomething: function(){
console.log('Hello i am ',this.firstName);
}
}
myUser.saySomething();
Le mot clé this fait référence à l'object qui appelle la méthode.
var myUser = {
firstName: 'john',
saySomething: function(){
console.log('Hello i am ',this.firstName);
},
parent: {
firstName: 'ned',
saySomething: function(){
console.log('Hello i am ',this.firstName);
}
}
}
myUser.saySomething();
myUser.parent.saySomething();
function User(name, email){
this.name = name;
this.email = email;
}
var myUser = new User('john','johnny@winterfell.org');
Pas de mot clé "class" avant ES2015 (anciennement ES6) .
Une simple fonction va nous permettre de mettre en place quelque chose de similaire
Le mot clé "new" permet de créer une instance de la classe User
function Person(name){
this.name = name;
}
Person.prototype.saySomething = function(){
console.log('hello i am ', this.name);
}
var myUser = new Person('johnSnow');
myUser.saySomething();
Pour rajouter une méthodes aux instances de la classe User, il suffit d'utiliser le prototype de la fonction.
function Client(name, company){
this.name = name;
this.company = company;
}
Client.prototype = Person.prototype;
var myClient = new Client('johnSnow', 'winterfell');
myClient.saySomething();
Une classe peut heriter d'une autre classe.
class Person{
constructor(name){
this.name = name;
}
saySomething(){
console.log(this.name);
}
}
class Client extend Person{
constructor(name, company){
super(name);
this.company = company;
}
}
const myClient = new Client('Tony', 'starckIndustries');
myClient.sySomething();
En JavaScript, l'objet window est global.
console.log('hello');
window.console.log('hello');
Permet de partager des variables entre différents scripts.
window.innerWidth;
window.innerHeight:
Renseigne egalement la hauteur et la largeur du navigateur.
Pour retrouver la taille d'une chaine il suffit d'utiliser la propriété length.
var aString = new String(4);
var anOtherString = new String(true);
console.log(typeof aString);
console.log(myString.length);
Nous pouvons utiliser la classe String pour convertir d'autres valeur en string.
Les objets de type string disposent de beaucoup de méthodes qui permettent de les manipuler:
Ainsi que d'autres que nous verrons plus tard.
//recuperer le énième char
var myString = 'i am a string';
console.log('La caractère d\'indice 0 est', myString.charAt(0));
//manipulation de sous chaine
console.log('selection a partir du 2eme char et sur 4 char ', myString.substr(2,4));
console.log('selection a partir du 2eme char jusqu\'au 5eme ', myString.substring(2,5));
//affiche 'am a'
//concaténation
var anotherString = 'another string';
console.log('concat method : ', myString.concat(anotherString));
console.log('concat with + : ', myString + anotherString);
//Toujours privilégier la deuxiémé methode (performances)
//trim supprime les espace au début et à la fin de la chaine
var myString = ' i am a STRING ';
console.log(myString.trim());
//mise en majuscule, minuscule
console.log(myString.trim().toUppercase());
console.log(myString.trim().toLowercase());
//recuperer la position d'un char
var myString = 'txtFileName.txt';
console.log('La 1ére sous chaine txt est à la ', myString.indexOf('txt'), 'éme position');
console.log('La dernière sous chaine txt est à la ', myString.lastIndexOf('txt'), 'éme ');
console.log(myString.indexOf('png')); //retourne -1
indexOf retourne l'indice de la première occurence de la sous chaine passé en paramètre.
lastIndexOf retourne l'indice de la dernière occurence de la sous chaine passé en paramètre.
Si la sous chaine n'est pas présente dans la chaine testée, les deux méthodes retourne -1.
var myStringArray = ['C++','Java','JavaScript'];
var otherArray = [
4,
'apple',
{
name: 'toto'
}
]
console.log(myStringArray.length);
Les Array sont des objets complexes qui se comportent comme des listes de données.
Ces données peuvent être de tout type (objets ou primitive).
Pour récuperer le nombre d'élément dans un tableau, il suffit d'utiliser la propriété length (come pour les strings)
var myStringArray = ['C++','Java','JavaScript'];
console.log(myStringArray[0], myStringArray[1]);
// 'C++' 'Java'
myStringArray[1] = 'php';
console.log(myStringArray);
// 'C++' 'php' 'JavaScript'
Pour acceder à une donnée stockée dans un array, il suffit de préciser un indice correspondant à la position de la donnée dans le tableau entre les "[]".
var myStringArray = ['C++','Java','JavaScript'];
for(var i = 0; i < myStringArray.length; i++){
console.log(myStringArray[i]);
}
for(var i in myStringArray){
console.log(myStringArray[i]);
}
Les objets de type array possède les méthodes suivantes :
var languages = ['C++','Java','JavaScript'];
languages.push('Python');
languages.unshift('C');
console.log(languages);
// ['c','c++','Java','JavaScript','Python']
Pour ajouter un element en fin de tableau, il faut utiliser la méthode push.
Pour ajouter un element en début de tableau, il faut utiliser la méthode unshift.
var languages = ['C++','Java','JavaScript', 'C#', 'Python'];
languages.pop();
languages.shift();
console.log(languages);
// ['Java','Javascript', 'C#']
languages.splice(1,1);
// le premier param est la position de l'élement à supprimer,
// le deuxième param est le nombre d'élément à supprimer.
console.log(languages);
// ['Java', 'C#']
Pour retirer un element en fin de tableau, il faut utiliser la méthode pop.
Pour retirer un element en début de tableau, il faut utiliser la méthode shift.
Pour toutes les autres positions, il faut utiliser la méthode splice.
var myStringArray = [13,5,3,24,7,6,75,45];
myStringArray.sort(function(a,b){
return a-b;
});
// Ascendant
console.log(myStringArray);
myStringArray.sort(function(a,b){
return b-a;
});
//descendant
console.log(myStringArray);
//inverse l'ordre d'un tableau (les derniers seront les premiers)
myString.reverse();
console.log(myStringArray);
La methode sort va nous permettre de réordonner un tableau de string ou un tableau de number.
la méthode reverse inverse l'ordre des éléments.
var fruits = ['pomme','poire'],
legumes = ['brocoli', 'choux'];
var panier = fruits.concat(legumes);
var panierFinal = fruits.concat(legumes, [
'steack',
'oeuf'
])
console.log(panierFinal);
// ['pomme','poire', 'brocoli', 'choux', 'steack', 'oeuf']
La methode concat retourne un nouveau tableau, resultat de la concaténation entre le tableau original, et les tableaux passés en paramètre.
var myArray = ['foo','bar'];
console.log(myArray.join('/')); //affiche foo/bar
console.log(myArray.join()); //affiche foo,bar
La méthode join permet de réunir tous les éléments d'un tableau dans une chaine de caractère.
Le deuxième paramètre (optionnel), indique la chaine de caractère qui delimitera les élements
La méthode toString appelé sur un array appelera en réalité join
var myArray = ['foo','bar', 'toto', 'tata'];
var slicedArray = myArray.slice(1,2);
console.log(slicedArray.join());
//affiche bar, toto
La méthode slice retourne un nouveau tableau qui contient une portion du tableau de base.
Si le tableau est un tableau d'objet, les deux tableaux contiennent des références vers les mêmes objets.
var myArray = ['foo','bar', 'toto', 'tata', 'bar'];
console.log(myArray.indexOf('bar'));
//affiche 1
console.log(myArray.indexOfLast('bar'));
Les méthodes indexOf et indexOfLast retourne la position dans le tableau de l'élément fournit en paramètre.
Si l'élément ne se trouve pas dans le tableau retourne -1
var myArray = ['foo','bar', 'toto', 'tata'];
myArray.forEach(function(value, index){
console.log(value, index);
//ici on peut manipuler chaque valeur une par une
})
Pour boucler dans un tableaux nous n'auront pas forcément besoin d'utiliser le for.
La fonction fournit en paramètre sera appelée à chaque itération de la boucle.
Il n'est pas possible d'utiliser breack avec la methode Array.prototype.forEach
!
var nombrePair = [2,4,6,8,10];
nombreImpair = nombrePair.map(function(value, index){
console.log(value, index);
return value -1;
})
console.log(nombrePair.join());
// affiche 2,4,6,8,10
console.log(nombreImpair.join());
// affiche 1,3,5,7,9
La fonction map retourne un nouveau tableau, chaque élément du tableau originel sera transformé par le callback.
Array.prototype.map = function(projection){
//la function retourne un array créons le
var response = [];
//on lance la boucle
this.forEach(function(value, index){
//on stocke dans le tableau de réponse, la valeur modifiée
//par la fonction passée en paramétre
response.push(projection(value));
})
//on retourne le tableau
return response;
}
Réecrivons la fonction map :
var nombres = [1,2,3,4,5,6,7,8,9,10];
var nombrePair = nombres.filter(function(value){
return value % 2 === 0;
});
var nombreImpair = nombres.filter(function(value){
return value % 2 === 1;
});
console.log('nombre pair : ', nombrePair.join());
// affiche 2,4,6,8,10
console.log('nombre impair : ',nombreImpair.join());
// affiche 1,3,5,7,9
La methode filter retourne un nouveau tableau contenant tous les éléments du premier tableau pour lesquel le callback retourne true.
var nombres = [1,2,3,4];
var reducedArray = nombres.reduce(function(valeurPrecedente, valeurCourante, index){
return valeurPrecedente + valeurCourante;
});
console.log(reducedArray);
// affiche 10
La methode reduce est un accumulateur, elle traite chaque valeur de la liste de la gauche vers la droite afin de réduire le tableau à une seule valeur.
Désigne la technologie liant le HTML au JavaScript.
Chaque balise HTML est un objet, dont les attributs sont les clés de l’objet.
Le Document Object Model (DOM) a été normalisé par le W3C en 1998.
root : html
body
head
title
section
article
article
p
H1
L'object document permet de manipuler le Dom.
Un objet de type HtmlElement, représente une balise html, présente ou non dans notre document.
Nous allons pouvoir effectuer un certain nombre de manipulations sur ces balises :
Le type HtmlElementCollection represente une liste d'objet HtmlElement.
Les objets de type HtmlElementCollection ne sont pas des Array
!
window.document possède 5 méthodes pour récupérer des éléménts dans le dom :
var myElement = document.getElementById('main-header');
var myHeaders = document.getElementsByTagName('header');
var mySpecialHeaders = document.getElementsByClassName('special-header');
var secondChildHeader = document.querySelector('article:nth-child(2) header');
var secondChildHeaders = document.querySelectorAll('article:nth-child(2) header');