I schreibe diese in Maschinenschrift:Maschinenschrift -> ES5 Ausgabe
const mask = [...Array(10)].map((item) => 0);
Im Knoten Konsole er eine Reihe von 10 Nullen erzeugt:
> [...Array(10)].map((item) => 0);
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
Sobald in JavaScript transpilied, es produziert:
var mask = Array(10).slice().map(function (item) { return 0; });
Aber das ist nicht äquivalent:
> Array(10).slice().map(function (item) { return 0; })
[ , , , , , , , , , ]
Ich hatte den Eindruck, dass Typoskript herzustellende iso-funktionalen Code soll. Lag ich falsch? Soll ich auf alles achten, was TS produziert?
Ich bin mit Knoten v7, tsc 1.20150623.0 mit dieser config:
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"module": "commonjs",
"target": "ES5",
"outDir": ".tmp/js",
"rootDir": "js"
}
}
ich dies nicht wiedergeben kann, ** aber **: Ihr TS, kopieren und einfügen, funktioniert gut. Die 'map' im JS-Formular schlägt fehl, sollte es aber nicht sein. Etwas Lustiges geht vor sich. – ssube
@ssube: Der JS verhält sich wie erwartet. Die '.slice()' Methode ignoriert Löcher im Array, also ist es eine genaue Darstellung des Originals. Siehe [22.1.3.22 Array.prototype.slice (Start, Ende)] (http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.slice) weisen speziell 15 (d), wobei * kPresent * das Ergebnis von * HasProperty * des aktuellen Index ist. –
@squint nicht genau, 'slice' _does_ geben Sie das gleiche Array, das 10 leere Indices hat. '.map' ignoriert sie jedoch als" funktionale "Familie von Methoden -" forEach "," map "," reduce "," some "usw. gehen nur über Werte des vorhandenen Arrays hinaus. – vlaz