2016-07-27 15 views
0

私は何か興味深いものを見つけました。なぜそれが起こっているのか分かりません。Javascript配列型キャスト

私はGoogle Chromeの開発ツールにしようとすると、以下の2 staments

(Array([1,2,3])).filter(function (item, index, array) { 
    return item === 1; 
}); ==> [] 

([1,2,3]).filter(function (item, index, array) { 
    return item === 1; 
}); ==> [1] 

結果は1(単一の値を持つ最初の文と配列のために空の配列です)

コールバック関数のパラメータを調べると、最初の文で引数が(配列、インデックス、値)であり、2番目のst atementeは(値、インデックス、配列)です。

typeofと両方のオブジェクトのコンストラクタを調べると、結果は期待され、同じ「オブジェクト」と配列になります。

どうしてですか?

おかげ

+0

おかげであなたの答えは、私は問題は、私はそれが関連していないと思ったので、私は尋ねなかったWICHた後、それらのほとんどは、正しいです。私はtypescriptを使用していましたが、typescriptのキャストはwith()で書かれています。だからこそ、私のコードは最初のステートメントで蒸解されてしまったのですが、明らかに正しいわけではありません。 – Alberto

答えて

5

それがどのようにdefineArray()の配列ではありませんので。

大括弧なしでなければなりません。それ以外の場合は、配列([1,2,3])の1つの要素の配列です。内側の配列は、(基本的にあなたが[1,2,3] == 1を確認してください)1に等しいことがないので、結果は空の配列であることを

Array(1,2,3) 

0

Array([1,2,3])配列の配列を作成する[[1, 2, 3]]だから.map()関数は1回だけ繰り返されます。

あなたがArrayコンストラクタを使用して、次の構文配列を作成する場合:

Array(1,2,3) 
1

あなたはこのコードArray([1,2,3])を使用して配列を定義する場合は、次の配列が作成されますが、

[[1,2,3]] 

配列を別の配列にプッシュしているからです。あなたが本当にその配列を読み取ることによって、配列を作成するために、配列関数をしたい場合、あなたは、

Array.apply([], [1,2,3]) 

をこのような何かを書かなければならない。しかし上記の1は完全に無意味です。繰り返しますが、私たちが手で必要とする配列を持っているので、それは全く無意味だと言っています。しかし知識のためにあなたはそれについて知ることができます。

0

短い方が良い:あなたのansewrsのためのすべての

[1,2,3].filter(item => item === 1); 
関連する問題