Sujet : Re: Indexation des tableaux en js
De : om+news (at) *nospam* miakinen.net (Olivier Miakinen)
Groupes : fr.comp.lang.javascriptDate : 12. Dec 2024, 22:41:59
Autres entêtes
Organisation : There's no cabale
Message-ID : <vjflb7$114q$1@cabale.usenet-fr.net>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 SeaMonkey/2.49.4
Le 12/12/2024 14:42, je répondais à Thierry Loiseau :
Bonjour Thuerry,
Oups ! Désolé, je ne m'étais pas relu. Le i et le u sont côte à côte sur
mon clavier.
a['null'] = 'null'
Rien que la dernière écriture est fausse :)
Qu'est-ce que cela veut dire, qu'une écriture est « fausse » ?
J'aimerais sincèrement comprendre ce que tu voulais dire par là. Peut-être
que tu as raison mais je ne pourrai le savoir que quand je comprendrai ta
remarque.
Mes essais montraient les choses suivantes.
Premièrement, que peu importe si l'on met comme index un entier, un mot-clé
ou une chaîne de caractères, il est interprété puis devient une chaîne de
caractères (par exemple 1/0 devient la chaine de caractères 'Infinity', ou
null la chaine de caractères 'null').
Deuxièmement, que si cette chaîne de caractères représente un nombre entre
'0' et '4294967294', alors quand on relit le tableau cela se comporte comme
si on avait vraiment un tableau indexé par un entier entre 0 et 4294967294,
alors que pour tout le reste (nombres ou pas) cela se comporte comme un
tableau associatif.
Je viens de refaire un essai dans nodejs, qui confirme ces deux premiers points.
Troisièmement, que dans ce tableau associatif, les chaines qui représentent
un mot-clé tel que 'null' ou 'Infinity' sont affichées comme s'il s'agissait
bien de la valeur null ou Infinity plutôt que comme la chaine de caractères
'null' ou 'Infinity'.
En ce qui concerne ce troisième point en revanche, c'était peut-être un effet de
bord du testeur de JS en ligne que j'avais utilisé (et que malheureusement je ne
retrouve pas).
Voici donc mon nouvel essai, en ligne de commande dans nodejs. Pour que le
prompt de nodejs ne soit pas confondu par les nouvelleurs avec un chevron
de citation, je remplace tous les prompts « > » par « @> ».
========================================
@> a = []
[]
@> index = 1
1
@> a[4294967297] = index++
1
@> a[1] = index++
2
@> a[-1] = index++
3
@> a[4294967295] = index++
4
@> a[3] = index++
5
@> a[-3] = index++
6
@> a[null] = index++
7
@> a[2] = index++
8
@> a[-2] = index++
9
@> a[4294967296] = index++
10
@> a[false] = index++
11
@> a[4294967294] = index++
12
@> a[1/0] = index++
13
@> a[4294967293] = index++
14
@> a['true'] = index++
15
@> a
[ <1 empty item>,
2,
8,
5,
<4294967289 empty items>,
14,
12,
'4294967297': 1,
'-1': 3,
'4294967295': 4,
'-3': 6,
null: 7,
'-2': 9,
'4294967296': 10,
false: 11,
Infinity: 13,
true: 15 ]
@>
========================================
Ce test montre bien que, quel que soit l'ordre dans lequel je mette une
entrée utilisant comme clé un entier entre 0 et 4294967294 (2**32-2),
celle-ci se place au début avec des « empty items » signalés entre toutes
ces valeurs. Et qu'au contraire tout ce qui n'est pas un entier entre 0
et 2**32-2 se trouve relégué à la fin, dans l'ordre où je les ai insérés
dans le tableau.
-- Olivier Miakinen