Maison > interface Web > js tutoriel > le corps du texte

Quelques comportements étranges des astuces JavaScript arrays_javascript

WBOY
Libérer: 2016-05-16 15:18:30
original
1309 Les gens l'ont consulté

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!"] 
Copier après la connexion

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!"] 
Copier après la connexion

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 />} 
Copier après la connexion

É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); //[] 
Copier après la connexion

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(…) 
Copier après la connexion

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"] 
Copier après la connexion

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 
Copier après la connexion

É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 
Copier après la connexion

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 
Copier après la connexion

Un peu similaire à l'exemple ci-dessous :

var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(a.length); //100 
Copier après la connexion

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 
Copier après la connexion

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 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal