alors là c'est pas gagné !!!
...autant retourner null si le tableau est vide
Code : Sélectionner tout - Visualiser dans une fenêtre à part return tableau.length ? tableau : null;
alors là c'est pas gagné !!!
...autant retourner null si le tableau est vide
Code : Sélectionner tout - Visualiser dans une fenêtre à part return tableau.length ? tableau : null;
Les joies du CSS | Réponses sur forum | Simple comme JS | Essais libres autour de l'API G$$gle Maps
✂ ---------------------------------------------
developpez.net c'est aussi :
✔ Les meilleurs cours et tutoriels pour apprendre le CSS
✔ Les meilleurs cours et tutoriels pour apprendre le (X)HTML
✔ Les meilleurs cours et tutoriels pour apprendre le JavaScript
au pire, transforme un peu le retour
et demande
Code : Sélectionner tout - Visualiser dans une fenêtre à part return tableau.toString()
au moins tu auras un résultat cohérent;
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert(retournerTableau(0)==="");
tu peux également passer par une comparaison avec un tableau vide déclaré, on comparera bien des références
avec dans la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part var TNULL = [];// sans allusion aucune
et le test
Code : Sélectionner tout - Visualiser dans une fenêtre à part return tableau.length ? tableau : TNULL;
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert( retournerTableau()=== TNULL);
Les joies du CSS | Réponses sur forum | Simple comme JS | Essais libres autour de l'API G$$gle Maps
✂ ---------------------------------------------
developpez.net c'est aussi :
✔ Les meilleurs cours et tutoriels pour apprendre le CSS
✔ Les meilleurs cours et tutoriels pour apprendre le (X)HTML
✔ Les meilleurs cours et tutoriels pour apprendre le JavaScript
attention: tableau.length renverra 0 si tableau est vide...
A la limite, décompose ton test pour éviter de te faire piéger par des références distinctes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var r = retournerTableau(0); alert(("pop" in r) && !r.length);//c.a.d. 1) est-ce un tableau ? PUIS 2) est-il vide ?
Qu'est-ce qui t'impose ce "pas le droit" ?En fait j'ai pas le droit de toucher à la comparaison
Parce que dans la mesure où il est impossible de comparer des tableaux, tu vas vite devoir modifier ta façon de faire...![]()
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum
Tu aime bien me taquiner …
Voila un bout de code qui génère des résultats différent selon les interpréteurs.
Encore plus étonnant sur Chrome et FF (a === c) => false !
Il semblerait que a et c ne référence pas le même type.
Si quelqu’un a une explication logique a cette absurdité ! Je suis preneur.
Désolé pour le hors sujet mais cela me tracasse ….
Il n'y a rien de suprenant :
a et b sont deux instances d'Array différentes donc deux objets différents
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var a = []; var b = [];
donc
Et comme dit plus haut c'est la longueur du tableau qui doit être testée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 a==b; //false []==[]; //false
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if(retournerTableau().length==0) { //tableau vide }
je te rassure sous IE et OPERA c'est également le même résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var a = new String('texte'); var b = 'texte'; alert( 'a : ' +typeof a +'\nb : ' +typeof b); alert( a===b);
Les joies du CSS | Réponses sur forum | Simple comme JS | Essais libres autour de l'API G$$gle Maps
✂ ---------------------------------------------
developpez.net c'est aussi :
✔ Les meilleurs cours et tutoriels pour apprendre le CSS
✔ Les meilleurs cours et tutoriels pour apprendre le (X)HTML
✔ Les meilleurs cours et tutoriels pour apprendre le JavaScript
a est un object généré par String.Encore plus étonnant sur Chrome et FF (a === c) => false !
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert(typeof a);
les 2 déclarations ci-dessus reçoivent bien le prototype String
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 String.prototype.Alert = function() { alert(this); } var a = new String('texte'); var b = 'texte'; a.Alert(); b.Alert();
Je ne te surprendrais en disant qu'une fois de plus, je ne suis pas vraiment d'accord... Je vais même finir par me demander s'il n'y a pas quelque chose de personnelEnvoyé par dukej
Qu'il soit normal que deux valeurs identiques créées par un constructeur soient considérées comme différentes (parce que représentant de fait deux instances différentes ayant la même valeur) peut se concevoir (et encore, l'opérateur == n'est pas défini, sauf erreur de ma part pour savoir si deux valeurs représentent la même instance mais pour savoir si deux valeurs sont égales...)
En revanche, ça ne devrait pas être le cas pour une déclaration littérale, ou du moins, le comportement devrait être identique pour tous les types.
Ce qu'il y a d'étonnant, c'est donc un comportement pour les nombres et les chaines et un différent pour les autres types...
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum
Encore faudrait'il savoir ce qu'est l'egalité literal de 2 tableaux ?
car pour moi , d'un point de vue literal, ceci ne me choquerais pas : [ 1, 2 ] == [2, 1] => true;
ben oui les 2 ensembles ont le le meme nombre d'element ainsi que leur intersection![]()
Ben non, pas vraiment, un tableau JavaScript est défini par un nombre donné de couples indices / valeur.
Deux tableaux sont donc supposés être égaux si pour chaque indice, la valeur est identique et strictement égaux si pour chaque indice, sa valeur et son type sont indentiques.
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum
ah pour moi lorsque l'on parle de "literal" c'est qu'on n'est plus dans language programation, mais dans le seul language universel exitant les maths !
si on en revient a le technique il s'agit de 2 alloctions memoire différences ( adresse, pointeur ou referance différentes ) est c'est donc normal que légalité ne fonctionne pas !
contrairement au string l’égalité de 2 tableaux n'a aucun définition ! heureusement que le langage javascript ne nous en impose pas une !
Non, lorsque je parle de littéral, c'est parce qu'il existe deux façons de déclarer des variables.
La forme constructeur :
qui instancient un objet et la forme littérale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var n = new Number(); var s = new String(); var a = new Array(); var o = new Object(); var f = new Function(); var r = new RexExp();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var n = 0; var s = ''; var a = []; var o = {}; var f = function(){}; var r = /./;
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum
C'est pourtant défini en PHP par exemple : Opérateurs de tableauxEnvoyé par p3ga5e
Qu'est-ce qu'il y a de choquant ou d'anormal ?
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum
^^ tu vient de me donner une autre raison de detester le langauge PHP ! merci
sinon concernant les déclarations littéral des objets je suis ok avec toi! mais pas pour la declaration des opérateurs sur les objets
par exemple a + b != b + a
si a et b sont des matrices de taille diferentes l'operateur + n'est pas comutatif mais quant est t'il de ta perception du + sur des Array javascript ?
c'est une question qui n'a pas de sens d'un point de vue mathématique
reste toujours le cas des strings en javascript qui reste un mystere pour moi![]()
Je pense que
correspond en interne à
Code : Sélectionner tout - Visualiser dans une fenêtre à part alert( []==[] ); // Joli smiley à lunettes au passage :)
Tandis que...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 var x, y; // Tableau #1 x=[]; // x référence le tableau #1 nouvellement créé // Tableau #2 y=[]; // y référence le tableau #2 nouvellement créé alert( x==y ); // False (ce n'est pas le même tableau qui est référencé)
Il nous manque vraiment une documentation sur la gestion des variables en mémoire par les interpreteurs Javascript. Nous ne devrions plus nous poser ce genre de questions aujourd'hui.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 var x, y; x=y=[1,2]; // x et y référencent le même tableau nouvellement créé alert( x==y ); // True
Partager