2016-01-26 10 views
7

Ich habe bemerkt, dass, wenn ich tun:Unterschied zwischen Array (n) und Array (n) .fill?

Array(n).map(() => console.log('test')) 

Allerdings, wenn ich tun:

Array(n).fill().map(() => console.log('test')) 

I test bekommen n mal ausgedruckt.

Warum ist das der Fall? Wenn ich Array(n).length mache, bekomme ich n zurück.

I Bekanntmachung im REPL dass Array(5) Rückkehr:

[ , , , , ]

Während Array(5).fill() Rückkehr:

[ undefined, undefined, undefined, undefined, undefined ]

In beiden Fällen typeof jedes Element in dem Array === undefined.

Also, was ist los?

Antwort

10

map funktioniert nur mit definierten ganzzahligen Eigenschaften eines Arrays. Array(n) legt keine Integer-Eigenschaften fest, während Array(n).fill() dies tut. Es gibt einen Unterschied zwischen eine Eigenschaft, die nicht existiert und eine vorhandene Eigenschaft, deren Wert ist undefined.

Array(n) legt die length -Eigenschaft des Arrays fest, aber es werden keine Eigenschaften festgelegt. Das Array-Objekt hat keine ganzzahligen Eigenschaften.

.fill Setzt alle Integer-Eigenschaften für ein Array von 0 bis 1 kleiner als length. Wenn Sie Array(n) tun, setzen Sie die length Eigenschaft des neuen Array, und dann .fill() definiert und legt jede Ganzzahl-Eigenschaft bis zu n-1. Das von Array(n).fill()erstellte Array hat Eigenschaften definiert bis zu length - 1. (Geschehen Die Eigenschaften undefined eingestellt werden, da Sie kein Argument zu fill bestanden haben, aber sie existieren.)

In Pracitcal Bedingungen kann man den Unterschied sehen, wenn Sie Object.keys(Array(4)) (leeres Array) tun gegen Object.keys(Array(4).fill()) (eine Liste von Strings "0" bis "3"). Im ersten Fall existieren die Eigenschaften nicht; im zweiten Fall tun sie es.

3

Array(n) erstellt ein neues Array der Größe n, der Inhalt wurde nicht definiert.

Array(n).fill() erstellt ein Array der Größe n, in dem jedes Element auf das gesetzt wird, was in Ihrem Fall in fill oder undefined übergeben wurde, da Sie nichts passiert haben.

Array(n).fill('test') erstellt ein Array der Größe n gefüllt mit "Test".

Verwandte Themen