2017-10-20 21 views
1

I ont un code dactylographiée hérité qui ressemble à ceci (à l'intérieur d'une fonction):dactylographiée const x = [... this.x]

const Statuses = [...this.Statuses] 

this.Statuses fait référence à un tableau de codes d'état (défini comme Statuses = status [];) défini dans le même fichier .ts. Suite à la ligne ci-dessus, le code fonctionne sur les statuts

J'essaie de comprendre ce que fait la syntaxe [... this.var]? Pourquoi ne pas simplement se référer à cela. Les états en premier lieu?

Oui, je suis nouveau javascript/tapuscrit ....

Merci à l'avance.

+0

JavaScript ES6 ou JS 2016, a ajouté beaucoup de nouvelles fonctionnalités. C'est l'un d'eux. Veuillez prendre 30min d'urs pour lire ES6. Cela vous aidera à comprendre la nouvelle syntaxe. https://babeljs.io/learn-es2015/ – xdeepakv

+1

@DeepakSharma: Il n'existe pas de JS 2016. Je pense que vous voulez dire ES2015. –

+0

Quel que soit l'homme, j'ai donné un exemple avec le lien ci-joint. rien de personnel – xdeepakv

Répondre

3

C'est "spread notation", il étend this.Statuses (qui doit être une sorte d'Iterable, comme un tableau) en éléments discrets. Dans ce cas, ceux-ci forment un nouveau tableau (parce que le ...this.Statuses est dans [], ce qui crée un tableau). Si this.Statuses est un tableau, il est fonctionnellement identique à const Statuses = this.Statuses.slice(); (ou également ce qui suit). Si this.Statuses est un autre type d'Iterable, il est fonctionnellement identique à const Statuses = Array.from(this.Statuses);.

+4

@jcalz: OMG, parlez de pilote automatique. Fixe, merci. (J'ai littéralement dit "... ça se déploie ..." et pourtant je regrettais de ne pas avoir dit "repos" Soupir ... Au moins je ne l'ai pas appelé un opérateur. –

1

C'est un moyen esthétiquement plaisant de de copier un tableau, pour éviter les mutations à l'original. Il utilise la syntaxe de propagation, comme mentionné dans d'autres réponses.

const a = [ 1 ] 
 
const b = a 
 
const c = [...a] 
 

 
b.push(2) 
 
c.push(3) 
 

 
console.log(` original: ${a}`) 
 
console.log(`reference: ${b}`) 
 
console.log(`  copy: ${c}`)

1

Il est spread syntax. Il permet de copier des éléments d'un tableau (ou objet) à un autre. Dans votre cas, il est utilisé pour faire une copie superficielle de this.Statuses pour éviter les mutations de tableau d'origine. Merci pour cela lorsque vous par exemple pousser nouvel élément à Statuses le tableau d'origine (this.Statuses) restera inchangé.