C'est une histoire de "c'est pourquoi", mais j'ai trouvé intéressant que le comportement soit différent dans chaque langue.
JavaScript
var arr = [];
arr[100] = 'foo';
console.log(arr.length); //=> 101
console.log(arr[0]); //=> undefined
console.log(arr[101]); //=> undefined
Les index non définis renvoient «non définis».
Déclarer "" use strict ";` ne change pas le résultat de l'exécution.
Perl
my @arr;
$arr[100] = 'foo';
print $#arr; #=> 100
print defined $arr[0] ? 1 : 0; #=> 0
print defined $arr[101] ? 1 : 0; #=> 0
Comme JavaScript, les index non définis semblent être ʻundef`.
Déclarer ʻuse strict; `ne change pas le résultat de l'exécution.
Ruby
arr = []
arr[100] = 'foo'
p arr.size #=> 101
p arr[0] #=> nil
p arr[101] #=> nil
C'est presque la même chose que JavaScript / Perl, mais cela devient «nil». Probablement parce qu'il n'y a pas d'équivalent de «non défini».
PHP
$arr = array();
$arr[100] = 'foo';
echo count($arr); //=> 1
echo is_null($arr[0]); //=> 1
echo is_null($arr[101]); //=> 1
L'index non défini sera «null».
La longueur du tableau est 1, ce qui est différent des autres langues. Cela semble être le cas en PHP car à la fois la liste et le hachage (dictionnaire) sont des «tableaux».
L'accès à un index non défini entraînera une erreur de niveau ʻE_NOTICE`. (Voir les commentaires pour plus de détails)
error_reporting(E_ALL); // E_Régler sur la sortie AVIS
$arr = array();
$arr[100] = 'foo';
echo $arr[0]; //=> Notice: Undefined offset: 0
Python
arr = []
arr[100] = 'foo' #=> IndexError: list assignment index out of range
Tenter de référencer / affecter un index qui n'existe pas entraîne ʻIndexError`. Je pense que c'est le comportement le plus simple.
Recommended Posts