1
私はtypescriptですでこれを書いて:、それが生成活字体は、 - > ES5問題
> [...Array(10)].map((item) => 0);
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
一旦JavaScriptでtranspilied:
ノードコンソールでconst mask = [...Array(10)].map((item) => 0);
は、それが10ゼロの配列を生成
var mask = Array(10).slice().map(function (item) { return 0; });
これは同等ではありません。
> Array(10).slice().map(function (item) { return 0; })
[ , , , , , , , , , ]
私は、タイスクリプトがiso-functionalコードを生成すると思われていました。私は間違っていた?私はTSが作り出しているすべてに注意を払うべきですか?
私はこの設定で1.20150623.0 TSC、ノードV7を使用しています:
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"module": "commonjs",
"target": "ES5",
"outDir": ".tmp/js",
"rootDir": "js"
}
}
私は、これを再現**しかし**できます:あなたのTS、コピーして貼り付け、正常に動作します。 JSフォームの 'map'は失敗していますが、そうではありません。面白い何かが起こっている。 – ssube
@ssube:JSは期待どおりに動作しています。 '.slice()'メソッドは配列の穴を無視するので、元のものを正確に表します。 [22.1.3.22 Array.prototype.slice(start、end)](http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.slice)、特にポイント15(d )、* kPresent *は現在のインデックスの* HasProperty *の結果です。 –
@squint正確には 'slice' _does_はあなたに10個の空白文字を持つ同じ配列を与えます。しかし、 '.map'はそれらをメソッドの"機能的な "ファミリとして無視します。 - forEach'、' map'、 'reduce'、' some'などは、存在する配列の値だけに行きます。 – vlaz