function foo() {
return 1,2,3;
}
console.log(foo()); // prints 3
console.log([].push(foo())); // prints 1
なぜこれが起こるのですか?
function foo() {
return 1,2,3;
}
console.log(foo()); // prints 3
console.log([].push(foo())); // prints 1
なぜこれが起こるのですか?
それは奇妙ではありません。3
配列にプッシュされる を返しているため、メソッド.push()
は新しい長さ を返します1
。
呼び出しをログに記録せず、.push()
呼び出しだけをログに記録すると、foo()
単に返された が表示され3
ます。
明確にするために、これを行うと:
return 1,2,3;
最後のコンマ演算子の結果を返します。これは最後の式であり、3
.
すべての値を配列にプッシュしたい場合は、値の配列を返す必要があります。これは、JavaScript が許可する戻り値は 1 つだけだからです。
function foo(){ return [1,2,3]; }
console.log(foo()); // prints [1,2,3]
console.log([].push.apply([], foo())); // prints 3
以前.apply()
は を呼び出し.push()
ていたので、返された Array のメンバーを個別の引数として渡します。
で区切られた式のリストの,
値は、最後の式の値です。したがって、
function foo(){ return 1,2,3; }
と同等です
function foo(){ return 3; }
[].push(foo())
を返す理由については、いくつかのドキュメント3
を読むだけで明らかです。配列の新しい長さを返します。Array.push()
push
質問 1 「1,2,3」を返すことは、JavaScript で複数の値を返すための適切な構文ではありません。あなたの構文は、最後の数字「3」を戻り値として渡すことになるようです。
var test = foo()
typeof test
"number"
複数のデータを渡す正しい方法については、これを参照してください: JavaScript で複数の値を返しますか?
質問2
console.log([].push(foo())); // prints 1
元の関数によって単一の数値「3」が出力されるため、プッシュは新しい配列の長さ「1」を返すため、これは正しいです。