L'importance des tableaux dans les langages de programmation va de soi. Les tableaux en JavaScript sont également l'un des objets les plus couramment utilisés. Les tableaux sont des collections ordonnées de valeurs. En raison de la faiblesse des types, les tableaux en JavaScript sont très flexibles et puissants. Contrairement aux tableaux dans les langages de haut niveau fortement typés tels que Java, qui ne peuvent stocker que des éléments du même type ou ses sous-types, JavaScript peut stocker plusieurs types d'éléments dans le même tableau, et la longueur peut également être ajustée dynamiquement. à mesure que les données augmentent ou réduisez les modifications automatiques de la longueur du tableau.
Aujourd'hui, j'ai examiné les tableaux JavaScript, puis j'ai résumé certains de ses comportements étranges. Je les partagerai avec vous ici. S'il y a des erreurs, veuillez les signaler !
Étrange 1 : La fonction constructeur Array() peut être appelée sans utiliser le mot-clé new :
Le constructeur Array() utilise les paramètres qui lui sont passés comme éléments du tableau pour créer un tableau. Généralement, on l'appelle ainsi :
var a = new Array(1, 2, "bom!"); a.length; //3 console.log(a); //[1, 2, "bom!"]
Cependant, il est également possible d'omettre du nouveau, comme suit :
var a = Array(1, 2, "bom!"); a.length; //3 console.log(a); //[1, 2, "bom!"]
Bien que je ne sache pas quel est son mécanisme de mise en œuvre interne, je suppose que sa fonction constructeur peut être définie comme suit :
function Array(args) { //如果,this不是Array的实例的话, //说明不是通过new调用的,则在这里再重新调用 if( !this instanceof Array) { return new Array(args); }//后面是正常调用时的实现代码<br />//...<br />}
Étrange 2 : Lorsqu'un seul paramètre est passé au constructeur, le comportement est imprévisible
Si un seul paramètre est passé, et que ce paramètre est un entier, un tableau sera obtenu, et la longueur est égale à ce paramètre
var a = new Array(12); console.log(a.length); //12 console.log(a); //[]
Si vous ne transmettez qu'un nombre à virgule flottante, une erreur sera signalée :
var a = new Array(1.1); //Uncaught RangeError: Invalid array length(…)
Passer une chaîne fonctionnera correctement, avec la chaîne comme premier élément du tableau :
var a = new Array("1.1"); console.log(a.length); // console.log(a); //["1.1"]
Mais afin d'éviter toute ambiguïté, je suggère qu'il est préférable de créer le tableau directement sous forme de littéraux :
var a = []; //空数组 var a = [1, 1, "bom"]; //三个元素 var a = [12]; //一个元素,并且元素是12
Étrange 3 : L'attribut length du tableau peut être modifié (inscriptible)
Comme suit, nous avons directement changé la longueur de 2 à 100, et la modification a réussi ! ! !
var a = [1, 2, 3, 4]; console.log(a.length); //4 a.length = 100; console.log(a.length); //100
Bien que la longueur soit égale à 100, les éléments a[4]-a[99] n'existent pas, et si vous demandez leurs valeurs, par exemple, faites-le dans une boucle de 0 à a.length, alors ils deviendront indéfinis .
Regarder ensuite :
var a = [1, 2, 3, 4]; a.length = 100; console.log(a[10]); //undefined console.log(99 in a); //false
Un peu similaire à l'exemple ci-dessous :
var a = [1, 2, 3, 4]; a[99] = undefined; console.log(a.length); //100
La différence est que a[99] existe ici parce que nous l'avons créé, même s'il a une valeur indéfinie. Mais tous les éléments de a[4] à a[98] n'existent pas, comme suit :
var a = [1, 2, 3, 4]; a[99] = undefined; console.log(99 in a); //true; console.log(98 in a); //false console.log(a.length); //100
Ce qui précède a partagé avec vous quelques comportements étranges des tableaux JavaScript. Veuillez me pardonner si l'article n'est pas bien écrit, merci !