Là, ça n'a pas de sens : eval attend une chaîne, sinon apparemment il renvoie l'objet entré sans rien faire. Comme tu lui donnes un objet Array...
-- Y.D.
YD
YD wrote:
Je simplifierai en écrivant sur une ligne : eval('fct("' + tablo[i].join('", "') + '")');
On peut essayer :
fct( eval( '"'+ tablo[i].join('","') +'"' ) );
Pas beaucoup mieux et je ne sais pas si ça marche (d'ailleurs j'en doute)...
Tu as raison de douter : tu effectues eval sur une chaîne du type : '"abc", "def", "ghi"' Donc eval exécute comme si on écrit directement : "abc", "def", "ghi" le js exécute "abc" qui donne la valeur chaîne abc ; c'est suivi par une virgule, on ne renvoie rien et on continue l'évaluation de l'instruction, donc "def" qui équivaut à la valeur chaîne def ; c'est suivi par une virgule, on ne renvoie rien et on continue l'évaluation de l'instruction, donc "ghi" qui équivaut à la valeur chaîne ghi ; on est arrivé au bout de l'expression avec les virgules on renvoie le dernier résultat la valeur chaîne ghi.
Attention à la virgule en js qui a une signification complètement différente selon qu'elle serve de séparateur de liste (pour les arguments d'une fonction, pour l'initialisation d'un objet Array...) ou de séparateur d'instructions un peu à la façon du ; mais dans ce cas seule la dernière valeur évaluée est renvoyée...
Pour être plus clair : si on écrit : c=1,2,6; à c est affectée la valeur numérique 1 puis js évalue 2 puis 6 mais n'en fait rien ; si on écrit : c=(1,2,6); c vaudra la valeur numérique 6 ! L'expression parenthésée est évaluée : la dernière des valeurs séparées par une virgule est renvoyée puis affectée à c.
Voilà pourquoi la seule façon de s'en sortir est d'écrire : eval('fct("' + tablo[i].join('", "') + '")'); pour obtenir l'instruction complète à évaluer où la virgule sert bien de séparateur de liste et non d'instructions.
Fin de la digression.
-- Y.D.
YD wrote:
Je simplifierai en écrivant sur une ligne :
eval('fct("' + tablo[i].join('", "') + '")');
On peut essayer :
fct( eval( '"'+ tablo[i].join('","') +'"' ) );
Pas beaucoup mieux et je ne sais pas si ça marche (d'ailleurs j'en
doute)...
Tu as raison de douter : tu effectues eval sur une chaîne du type :
'"abc", "def", "ghi"'
Donc eval exécute comme si on écrit directement :
"abc", "def", "ghi"
le js exécute "abc" qui donne la valeur chaîne abc ;
c'est suivi par une virgule, on ne renvoie rien et on continue l'évaluation
de l'instruction, donc "def" qui équivaut à la valeur chaîne def ;
c'est suivi par une virgule, on ne renvoie rien et on continue l'évaluation
de l'instruction, donc "ghi" qui équivaut à la valeur chaîne ghi ;
on est arrivé au bout de l'expression avec les virgules on renvoie le dernier
résultat la valeur chaîne ghi.
Attention à la virgule en js qui a une signification complètement différente
selon qu'elle serve de séparateur de liste (pour les arguments d'une fonction,
pour l'initialisation d'un objet Array...) ou de séparateur d'instructions un peu
à la façon du ; mais dans ce cas seule la dernière valeur évaluée est renvoyée...
Pour être plus clair :
si on écrit : c=1,2,6;
à c est affectée la valeur numérique 1 puis js évalue 2 puis 6 mais n'en fait rien ;
si on écrit : c=(1,2,6);
c vaudra la valeur numérique 6 ! L'expression parenthésée est évaluée :
la dernière des valeurs séparées par une virgule est renvoyée puis affectée
à c.
Voilà pourquoi la seule façon de s'en sortir est d'écrire :
eval('fct("' + tablo[i].join('", "') + '")');
pour obtenir l'instruction complète à évaluer où la virgule sert bien de séparateur
de liste et non d'instructions.
Je simplifierai en écrivant sur une ligne : eval('fct("' + tablo[i].join('", "') + '")');
On peut essayer :
fct( eval( '"'+ tablo[i].join('","') +'"' ) );
Pas beaucoup mieux et je ne sais pas si ça marche (d'ailleurs j'en doute)...
Tu as raison de douter : tu effectues eval sur une chaîne du type : '"abc", "def", "ghi"' Donc eval exécute comme si on écrit directement : "abc", "def", "ghi" le js exécute "abc" qui donne la valeur chaîne abc ; c'est suivi par une virgule, on ne renvoie rien et on continue l'évaluation de l'instruction, donc "def" qui équivaut à la valeur chaîne def ; c'est suivi par une virgule, on ne renvoie rien et on continue l'évaluation de l'instruction, donc "ghi" qui équivaut à la valeur chaîne ghi ; on est arrivé au bout de l'expression avec les virgules on renvoie le dernier résultat la valeur chaîne ghi.
Attention à la virgule en js qui a une signification complètement différente selon qu'elle serve de séparateur de liste (pour les arguments d'une fonction, pour l'initialisation d'un objet Array...) ou de séparateur d'instructions un peu à la façon du ; mais dans ce cas seule la dernière valeur évaluée est renvoyée...
Pour être plus clair : si on écrit : c=1,2,6; à c est affectée la valeur numérique 1 puis js évalue 2 puis 6 mais n'en fait rien ; si on écrit : c=(1,2,6); c vaudra la valeur numérique 6 ! L'expression parenthésée est évaluée : la dernière des valeurs séparées par une virgule est renvoyée puis affectée à c.
Voilà pourquoi la seule façon de s'en sortir est d'écrire : eval('fct("' + tablo[i].join('", "') + '")'); pour obtenir l'instruction complète à évaluer où la virgule sert bien de séparateur de liste et non d'instructions.
Fin de la digression.
-- Y.D.
Cenekemoi
Attention à la virgule en js qui a une signification complètement différente selon qu'elle serve de séparateur de liste (pour les arguments d'une fonction, pour l'initialisation d'un objet Array...) ou de séparateur d'instructions un peu à la façon du ; mais dans ce cas seule la dernière valeur évaluée est renvoyée... Pour être plus clair : si on écrit : c=1,2,6; à c est affectée la valeur numérique 1 puis js évalue 2 puis 6 mais n'en fait rien ; si on écrit : c=(1,2,6); c vaudra la valeur numérique 6 ! L'expression parenthésée est évaluée : la dernière des valeurs séparées par une virgule est renvoyée puis affectée à c.
Voilà pourquoi la seule façon de s'en sortir est d'écrire : eval('fct("' + tablo[i].join('", "') + '")'); pour obtenir l'instruction complète à évaluer où la virgule sert bien de séparateur de liste et non d'instructions.
Merci de ces précisions qui m'avaient échappé
Fin de la digression.
Si tu insistes...je vais me prendre un café :-)
-- Cordialement, Thierry ;-)
Attention à la virgule en js qui a une signification complètement
différente selon qu'elle serve de séparateur de liste (pour les
arguments d'une
fonction, pour l'initialisation d'un objet Array...) ou de séparateur
d'instructions un peu à la façon du ; mais dans ce cas seule la
dernière valeur évaluée est
renvoyée...
Pour être plus clair :
si on écrit : c=1,2,6;
à c est affectée la valeur numérique 1 puis js évalue 2 puis 6 mais
n'en fait rien ; si on écrit : c=(1,2,6);
c vaudra la valeur numérique 6 ! L'expression parenthésée est évaluée
: la dernière des valeurs séparées par une virgule est renvoyée puis
affectée à c.
Voilà pourquoi la seule façon de s'en sortir est d'écrire :
eval('fct("' + tablo[i].join('", "') + '")');
pour obtenir l'instruction complète à évaluer où la virgule sert bien
de séparateur de liste et non d'instructions.
Attention à la virgule en js qui a une signification complètement différente selon qu'elle serve de séparateur de liste (pour les arguments d'une fonction, pour l'initialisation d'un objet Array...) ou de séparateur d'instructions un peu à la façon du ; mais dans ce cas seule la dernière valeur évaluée est renvoyée... Pour être plus clair : si on écrit : c=1,2,6; à c est affectée la valeur numérique 1 puis js évalue 2 puis 6 mais n'en fait rien ; si on écrit : c=(1,2,6); c vaudra la valeur numérique 6 ! L'expression parenthésée est évaluée : la dernière des valeurs séparées par une virgule est renvoyée puis affectée à c.
Voilà pourquoi la seule façon de s'en sortir est d'écrire : eval('fct("' + tablo[i].join('", "') + '")'); pour obtenir l'instruction complète à évaluer où la virgule sert bien de séparateur de liste et non d'instructions.
Merci de ces précisions qui m'avaient échappé
Fin de la digression.
Si tu insistes...je vais me prendre un café :-)
-- Cordialement, Thierry ;-)
Pascal Pensa
"YD" a écrit dans le message de news: 4332a542$0$5407$
...
Voilà pourquoi la seule façon de s'en sortir est d'écrire : eval('fct("' + tablo[i].join('", "') + '")');
Hello,
En effet c'est plus propre que ma double boucle :-)
Il va s'en dire que si j'avais le droit de toucher la fameuse 'fct' de ce 'kit' corporate j'aurais évité ce genre de bidouille... ce qui est d'autant plus con qu'en ayant jetté un oeil dessus elle retransforme par la suite les arguments[x] en tableau, bref... merci pour vos lumières anyway.
Pascal
"YD" <No-spam@thank.you.invalid> a écrit dans le message de news:
4332a542$0$5407$8fcfb975@news.wanadoo.fr...
...
Voilà pourquoi la seule façon de s'en sortir est d'écrire :
eval('fct("' + tablo[i].join('", "') + '")');
Hello,
En effet c'est plus propre que ma double boucle :-)
Il va s'en dire que si j'avais le droit de toucher la fameuse 'fct' de ce
'kit' corporate j'aurais évité ce genre de bidouille... ce qui est d'autant
plus con qu'en ayant jetté un oeil dessus elle retransforme par la suite les
arguments[x] en tableau, bref... merci pour vos lumières anyway.
"YD" a écrit dans le message de news: 4332a542$0$5407$
...
Voilà pourquoi la seule façon de s'en sortir est d'écrire : eval('fct("' + tablo[i].join('", "') + '")');
Hello,
En effet c'est plus propre que ma double boucle :-)
Il va s'en dire que si j'avais le droit de toucher la fameuse 'fct' de ce 'kit' corporate j'aurais évité ce genre de bidouille... ce qui est d'autant plus con qu'en ayant jetté un oeil dessus elle retransforme par la suite les arguments[x] en tableau, bref... merci pour vos lumières anyway.