11521 sujets

JavaScript, DOM et API Web HTML5

bonjour

https://jsfiddle.net/tankarasu/tmx38k1g/16/

j'ai fait un tableau qui affiche des contacts et j'utilise la méthode push. Je ne comprends pas pourquoi le console.log me renvoie la longueur du tableau après le push alors que précédemment à la ligne 10 il me renvoie le contenu du tableau. Puis je me demande pourquoi j'était obligé de prendre un nouveau tableau pour affecter les résultats. Ex: nom[] et nom1[] . Si je ne fais pas cela après le push le console.log me renvoie les valeurs d'avant le push.

Merci
Salut

let
    prenom = ["Carole", "Mélodie"],
    nom = ["Levisse", "Nelsonne"];

function listeContact() {
    for (const [i, item] of nom.entries()) {
        console.log(item + " " + prenom[i]);
    };
}

listeContact();

/*
Levisse Carole
Nelsonne Mélodie
*/

prenom.push("Charles");
nom.push("Dupont");

listeContact();

/*
Levisse Carole
Nelsonne Mélodie
Dupont Charles
*/
Merci du coup je me pose la question pourquoi utiliser ici "let" et que signifie "const [i, item] of nom.entries())" ?
Modérateur
Et l'eau,

@danielhagnoul : ta syntaxe est avancée et certains membres peuvent avoir du mal à te suivre. Cela dit, j'aime bien te lire. Smiley smile

tankarasu a écrit :

j'ai fait un tableau qui affiche des contacts et j'utilise la méthode push. Je ne comprends pas pourquoi le console.log me renvoie la longueur du tableau après le push alors que précédemment à la ligne 10 il me renvoie le contenu du tableau. Puis je me demande pourquoi j'était obligé de prendre un nouveau tableau pour affecter les résultats. Ex: nom[] et nom1[] . Si je ne fais pas cela après le push le console.log me renvoie les valeurs d'avant le push.
....

Merci du coup je me pose la question pourquoi utiliser ici "let" et que signifie "const [i, item] of nom.entries())" ?


la méthode log de l'objet console permet de déboguer ton script. Du moins, afficher dans la console du navigateur, la valeur de la variable passée en paramètre. Si tu passes une chaîne de caractères, ça t'affichera celle là. Si tu passes un objet litéral ou un array, ça t'affichera tout le contenu.

const est une façon de déclarer une variable. Mais celle ci ne sera disponible/accessible qu'en lecture et non en lecture/écriture.
En général et par convention d'écriture, on utilise des majuscules pour déclarer une constante. À noter que la portée d'une constante en Javascript est la même avec le mot clef var

Personnellement, je trouve qu'il y a des excès d'utilisation de ce type de mot clef.

Sinon, voilà un exemple de déclaration d'une constante :

const TVA_FRANCE = 19.6;


let permet de déclarer une variable dont la portée est réduite à celle du bloc (if, for, while, function, etc.) dans lequel tu la déclares

Pour finir, et pour éviter qu'on te balance RTFM je t'invite à aller régulièrement sur la mdn lorsque tu te poses des questions de ce type. Il y a un autre site dont je te recommande pour apprendre et comprendre le javascript au début : toutjavascript . Bien qu'il soit intéressant, il est moins fournis que la mdn.
Modifié par niuxe (23 Jul 2019 - 14:00)
Bonsoir

@niuxe : Merci pour ton commentaire.

J'écris le JS d'aujourd'hui.
const et let sont venus avec ES2015, quatre ans déjà !
var est une abomination source de bien des problèmes de portée et de valeur dans les boucles for.

Si personne ne donne des exemples de code actuels et que l'on continue d'écrire des codes compatibles avec IE 9, les débutants resteront dans cet état longtemps encore.
Modérateur
danielhagnoul a écrit :

...
J'écris le JS d'aujourd'hui.


+1
danielhagnoul a écrit :

const et let sont venus avec ES2015, quatre ans déjà !


Les constantes, c'est beaucoup plus vieux que ça Smiley cligne


danielhagnoul a écrit :

var est une abomination source de bien des problèmes de portée et de valeur dans les boucles for.

Je ne suis pas vraiment de ton avis. Une closure peut bien t'aider dans ce cas .
danielhagnoul a écrit :

Si personne ne donne des exemples de code actuels et que l'on continue d'écrire des codes compatibles avec IE 9, les débutants resteront dans cet état longtemps encore.

Je suis entièrement de ton avis mais dans ce cas là explique ce que tu fais et pourquoi. Smiley cligne
Modifié par niuxe (24 Jul 2019 - 14:04)
Bonsoir

Je ne vais pas entamer une polémique, ce message sera mon dernier dans cette discussion, je vous conseille juste un peu de lecture.

mdn const : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/const

a écrit :
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Déclarations let et const' dans cette spécification.


a écrit :
Cette déclaration permet de créer une constante qui peut être globale ou locale pour la fonction dans laquelle elle a été déclarée. Les constantes font partie de la portée du bloc (comme les variables définies avec let). À la différence des variables définies avec var, les constantes déclarées au niveau global ne sont pas des propriétés de l'objet global (window dans le cas du navigateur). Il est nécessaire d'initialiser une constante lors de sa déclaration. Au sein d'une même portée, il est impossible d'avoir une constante qui partage le même nom qu'une variable ou qu'une fonction.

Attention, la déclaration const crée une référence en lecture seule vers une valeur. Cela ne signifie pas que la valeur référencée ne peut pas être modifiée ! Ainsi, si le contenu de la constante est un objet, l'objet lui-même pourra toujours être modifié.


Pour var, c'est que vous avez eu la chance de passer à coter des problèmes.

Quatre ans après la sortie d'une norme, on ne devrait plus avoir à expliquer le fonctionnement de chaque ligne de code basique, cela devrait être fait en classe.
Modérateur
danielhagnoul a écrit :
Bonsoir

Je ne vais pas entamer une polémique, ce message sera mon dernier dans cette discussion, je vous conseille juste un peu de lecture.

mdn const : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/const

ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Déclarations let et const' dans cette spécification.


a écrit :
Cette déclaration permet de créer une constante qui peut être globale ou locale pour la fonction dans laquelle elle a été déclarée. Les constantes font partie de la portée du bloc (comme les variables définies avec let). À la différence des variables définies avec var, les constantes déclarées au niveau global ne sont pas des propriétés de l'objet global (window dans le cas du navigateur). Il est nécessaire d'initialiser une constante lors de sa déclaration. Au sein d'une même portée, il est impossible d'avoir une constante qui partage le même nom qu'une variable ou qu'une fonction.

Attention, la déclaration const crée une référence en lecture seule vers une valeur. Cela ne signifie pas que la valeur référencée ne peut pas être modifiée ! Ainsi, si le contenu de la constante est un objet, l'objet lui-même pourra toujours être modifié.


Pour var, c'est que vous avez eu la chance de passer à coter des problèmes.

Quatre ans après la sortie d'une norme, on ne devrait plus avoir à expliquer le fonctionnement de chaque ligne de code basique, cela devrait être fait en classe.

Bonsoir Daniel,

Non, je vous assure que const et même let sont des mots clefs très vieux.

- headfirst javascript (edition 2007)
- Javascript definitive guide 6th edition (2011)

Perso, j'avais lu headfirst et pour le definitve guide, je l'ai un peu parcouru. Au passage, il y aussi yield (générateur ^^) implements (les interfaces ^^) , private, static, protected, etc. Il faut penser une chose est que le javascript est à l'origine le java en light. C'est à dire, il a été conçu comme le Java (je ne dis pas qu'il fasse la même chose). C'est la raison pour laquelle, les mots clefs Java sont dans le JS (Ecmascript 3 il me semble).

Le principal est de pourvoir les utiliser et surtout à bon escient. Après et finalement, on s'en moque que ses mots clefs soient sorti avant ou après 2015.

Ensuite pour les problèmes de var , je comprends pas trop puisqu'il y a les closures.

<<<EDIT
on peut très bien faire du namespacing pour contre carrer les collisions :


//syntaxe ES5
var app = app || {};

app.monModel = function(){
  //etc..
}

app.maCollection = function(){
  //etc.
}

//etc.

EDIT;
Modifié par niuxe (24 Jul 2019 - 23:12)