IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Pourquoi je n'ai pas d'erreur avec "use strict" ?


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 591
    Points : 813
    Points
    813
    Par défaut Pourquoi je n'ai pas d'erreur avec "use strict" ?
    Bonjour,

    Pourquoi je n'ai pas d'erreur avec "use strict" ?
    D'habitude on se pose plutôt la question inverse mais j'aime bien comprendre.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    "use strict";
     
    const
    	tabForms	= document.querySelectorAll("[name='tabForm']")
    	,dates		= document.querySelectorAll("[id*='date_']")
    	,dateLabels	= document.querySelectorAll("[for*='date_']")
    	,calSpan	= document.querySelector("#calSpan")
    	;
     
    console.log(tabForm);
    Ici, je n'ai qu'un élément form et la console détecte tabForms[0]. Est-ce bien normal? Pourquoi?

  2. #2
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    querySelectorAll renvoit un tableau meme si il n'y a qu'un élément, querySelector, renverra lui un élément (le premier qu'il trouve)

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 591
    Points : 813
    Points
    813
    Par défaut
    Justement, je me suis peut-être mal exprimé. A la ligne 10, la console détecte tabForm qui n'est pas déclaré comme si j'avais écrit tabForms[0]. Je devrais donc avoir une erreur puisque d'une part je suis en mode strict et que d'autre part tabForm (sans S) est indéfini.

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    C'est une tolérance qui subsiste depuis les années d'enfance de Javascript: on pouvait désigner un élément du DOM simplement par son "id" ou son "name", sans passer par les méthodes (qui n'existaient pas) getElementById() ou GetElementsByName(); ce qui est drôle, c'est que c'était une syntaxe exclusive IE, donc en JScript, et que maintenant elle est acceptée partout
    Tu peux donc toujours le faire; ça n'a pas grande conséquence sauf que si tu déclares une variable du même nom, c'est elle qui sera ciblée;

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Teste ça pour t'amuser:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <div id="div_id">div appelé par son id</div>
    <form name="form_name" data_t="formulaire appelé par son name">
    <p>
    <input type="text" size="50" name="text_name" value="input appelé par le name de son parent + son name" />
    </p>
    <p>
    <input type="button"  id="button_id" value="button appelé par son id" />
    </p>
    </form>
     
    <script>
    console.log(div_id)
    console.log(form_name)
    console.log(form_name.text_name)
    console.log(button_id)
    </script>

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 591
    Points : 813
    Points
    813
    Par défaut
    OK, merci. Je comprends mais pour la bonne pratique je pense qu'il vaut mieux être rigoureux avec un tabForms[0]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/02/2019, 08h30
  2. Réponses: 3
    Dernier message: 05/12/2015, 03h11
  3. Pas d'erreur avec UPDATE si un champ n'existe pas !
    Par poiwalt dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/01/2009, 15h32
  4. Erreur avec le SaveDialog!Ne fonctionne pas!
    Par ghan77 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 25/01/2006, 17h05
  5. Erreur avec IE mais pas avec Netscape
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/02/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo