Déclarer plusieurs variables dans JavaScript

je veux déclarer plusieurs variables dans une fonction:

function foo() {
    var src_arr     = new Array();
    var caption_arr = new Array();
    var fav_arr     = new Array();
    var hidden_arr  = new Array();
}

Est-ce la bonne façon de le faire?

var src_arr = caption_arr = fav_arr = hidden_arr = new Array();
34
demandé sur Peter Mortensen 2010-11-03 01:13:29

4 réponses

Oui, c'est si vous souhaitez qu'ils pointent vers le même objet en mémoire, mais il est fort probable que vous voulez qu'il s'agisse de tableaux individuels de sorte que si l'un d'eux mute, les autres ne soient pas affectés.

si vous ne voulez pas qu'ils pointent tous vers le même objet, faites

var one = [], two = [];

[] est une abréviation littérale pour créer un tableau.

Voici un journal de la console qui indique la différence:

>> one = two = [];
[]
>> one.push(1)
1
>> one
[1]
>> two
[1]
>> one = [], two = [];
[]
>> one.push(1)
1
>> one
[1]
>> two
[]

Dans la première partie, je défini one et two pointer vers le même objet/tableau en mémoire. Si j'utilise le .push méthode il pousse 1 de la matrice, et donc les deux one et two1 à l'intérieur. Dans la seconde depuis que j'ai défini des tableaux uniques par variable de sorte que lorsque j'ai poussé à un, deux n'a pas été affectée.

67
répondu meder omuraliev 2010-11-02 22:21:21

Merci rester à l'écart à partir de ce modèle d'affectation, même si vous vouliez que toutes les variables pointent vers le même objet.

En fait, seul le premier sera un déclaration des variables, le reste sont des affectations pour éventuellement identificateurs non déclarés!

assigner une valeur à un identifiant non déclaré (alias cession non déclarée) est fortement déconseillée car, si l'identifiant n'est pas trouvé sur le scope chain, une variable globale sera créée. Par exemple:

function test() {
    // We intend these to be local variables of 'test'.
    var foo = bar = baz = xxx = 5;
    typeof foo; // "number", while inside 'test'.
}
test();

// Testing in the global scope. test's variables no longer exist.
typeof foo; // "undefined", As desired, but,
typeof bar; // "number", BAD!, leaked to the global scope.
typeof baz; // "number"
typeof xxx; // "number"

de plus, le 5ème mode Strict D'ECMAScript, interdit ce genre de missions. Sous le mode strict, une assignation faite à un identifiant non déclaré provoquera un TypeError exception, pour empêcher les globals implicites.

par contraste, voici ce que nous voyons si écrit correctement:

function test() {
    // We correctly declare these to be local variables inside 'test'.
    var foo, bar, baz, xxx;
    foo = bar = baz = xxx = 5;
}
test();

// Testing in the global scope. test's variables no longer exist.
typeof foo; // "undefined"
typeof bar; // "undefined"
typeof baz; // "undefined"
typeof xxx; // "undefined"
16
répondu CMS 2012-07-18 22:43:21

non, votre deuxième énoncé créera quatre références au même tableau. Vous voulez:

var src_arr     = [],
    caption_arr = [],
    fav_arr     = [],
    hidden_arr  = [];
1
répondu hvgotcodes 2016-01-17 12:51:24

toutes ces variables feront référence à un objet de tableau.

0
répondu heximal 2016-01-17 12:51:40