2010-03-16 7 views
3

Tout en lisant un livre sur JavaScript je suis tombé sur un exemple:Les tableaux en JavaScript

var names = new Array("Paul","Catherine","Steve"); 
var ages = new Array(31,29,34); 
var concatArray; 
concatArray = names.concat(ages); 

Ma question est, pourquoi ne pas la concatArray de variable à définir comme new Array() afin de stocker les données concaténés mais lorsque j'essaie de traiter le concatArray comme un tableau en ajoutant une autre ligne de code "document.write(concatArray[0])", il fonctionne comme un tableau et me montre les données stockées dans le premier élément. Je me demande juste pourquoi je ne déclare pas le concatArray comme un nouveau tableau, mais il fonctionne toujours comme un seul.

Répondre

0

Parce que Javascript est typé dynamiquement.Une variable n'a pas de type specifuc et un tableau est un objet que vous pouvez affecter à n'importe quelle variable.

Lorsque vous déclarez une variable sans lui assigner une valeur, il existe seulement avec une valeur non définie:

var answer; 
// now the variable exists, but it doesn't have a value 
answer = 42; 
// now the variable has the numerical value 42 
answer = "hello"; 
// now the numerical value has been replaced with the string value "hello" 
answer = []; 
// now the variable contains an empty array 
answer[0] = 1337; 
// now the variable contains an array that contains an item with the value 1337 
answer = -1 
// now the array is gone and the variable contains the value -1 
+0

mais lorsque je tente de l'exécuter de cette manière

 var myArray(); myArray[0] = 2; // or string or whatever alert(myArray[0]); 
Je l'ai fait en ignorant la ligne var myArray = new Array();, et le code ne fonctionne pas.Pourquoi? Je pensais que javascript est un langage faiblement typé – caramel1995

+0

@caramel: Déclarer une variable comme 'var myArray();' n'est pas valide. Javascript ne gère pas les tableaux de cette façon, mais crée un objet tableau et l'affecte à une variable: 'var myArray = new Array();' ou 'var myArray = [];'. – Guffa

+0

MERCI pour vous les conseils des gars, je vais relire encore une fois plus tard et choisir quelle est la meilleure réponse, MERCI encore !!! – caramel1995

6

Vous déclarez concatArray en tant que nouveau tableau mais la déclaration est implicite. La fonction concat renvoie un nouveau tableau qui contient des copies concaténées des deux tableaux d'origine. Le type de concatArray est déduit du type de retour de la fonction concat.

1

Javascript ne se soucie pas ce que le contenu du var sont quand elle est déclarée; c'est pourquoi vous pouvez déclarer var concatArray sans avoir besoin de le spécifier en tant que tableau. Une fois que vous lui avez affecté une valeur et un type (résultat de la fonction concat()) javascript traite la variable comme un tableau.

1

En termes simples, W3Schools le dit assez lapidaire:

La méthode concat() est utilisé pour joindre deux ou plusieurs tableaux.

Cette méthode ne modifie pas les tableaux existants, elle renvoie uniquement une copie des tableaux joints.

w3schools

On dirait Andrew et Matthew m'a battu à toute façon.

3

Les variables ne possèdent pas de type de données spécifique en Javascript comme dans les autres langues. Vous pouvez assigner une variable à chaque valeur que vous voulez.

Cela signifie var concatArray; déclare la variable mais la valeur est undefined:

var concatArray; 
alert(typeof concatArray === "undefined"); 

uniquement lors de l'attribution de la valeur de retour de names.concat(ages) (un tableau) pour concatArray il OBTENONS ce type:

var names = new Array("Paul","Catherine","Steve"); 
var ages = new Array(31,29,34); 
var concatArray; 
alert(typeof concatArray === "undefined"); 
concatArray = names.concat(ages); 
alert(concatArray.constructor === Array); 
0

I ferait une réponse légèrement différente de celle d'Andrew.
Les variables JavaScript ne sont pas fortement typées. Vous pouvez mettre une chaîne, puis un nombre, puis un objet dans la même variable. Lorsque vous utilisez la variable, l'interpréteur vérifie que son type actuel convient à l'utilisation que vous tentez de faire. Si vous écrivez:

var a = 45; 
alert(a[0]); 
a = [ 5 ]; 
alert(a[0]); 

vous obtiendrez successivement non définie alors .

Questions connexes