2016-08-09 7 views
-1

Spread Operator floatとboolean variableのエラーをスローします。 floatとboolean変数にエラーが発生する特定の理由はありますか?フロートとブール変数のスプレッド演算子の問題

// Works, Array Variable 
'use strict'; 

let aVal = [1, 2, 3]; 
console.log(...aVal); 

// Works, String Variable 
'use strict'; 

let sVal = 'String'; 
console.log(...sVal); 

// throws error, Integer Variable 
'use strict'; 

let iVal = 1234567890; 
console.log(...iVal); 

// throws error, Float Variable 
'use strict'; 

let fVal = 99.45; 
console.log(...fVal); 

// throws error, Boolean Variable 
'use strict'; 

let bVal = true; 
console.log(...bVal); 
+4

はい、それらを反復処理できないためです。たとえば、フロートを広げることでどのような結果が期待できますか? – Thomas

答えて

7

フロートとブール変数のエラーを取得するための具体的な理由があります。

はい:スプレッド構文(演算子ではありません)は、iterableオブジェクト(反復を実装するオブジェクト)でのみ動作します。数字とブール値は反復可能ではありません。配列やマップ、セットなどのものは反復可能です。

console.log(...aVal);は、JavaScriptエンジンにaValを反復し、各反復値を離散引数として呼び出すように要求します。つまり、iterableを「広げる」ようにjavaScriptに要求します。 aのエントリである離散へ(別個の)「広がる」方法

function foo(a, b, c, d) { 
 
    console.log(a); 
 
    console.log(b); 
 
    console.log(c); 
 
    console.log(d); 
 
} 
 
let a = ["the", "answer", "is", 42]; 
 
foo(...a);

注:ここ

が反復可能(この場合、アレイ)とのスプレッドの例ですfooの引数


以下の例は、誤って「残りの演算子」について質問していたときのものです。ただ、完全性のため:

function foo(...args) { 
 
    console.log(`I got ${args.length} args`); 
 
} 
 
foo('a', 'b', 'c');

...と分割代入の構文を休ま:

ここで残りの構文関数のシグネチャで(もないオペレータ)の例を示します。

let a = ['a', 'b', 'c', 'd', 'e']; 
 
let [ x, y, ...z ] = a; 
 
console.log(x); 
 
console.log(y); 
 
console.log(z);

+0

@Venkatraman:これについてさらに質問がありましたか? –

+1

@FelixKling:そうです、それは構文であり、演算子ではありません。 –

+0

@ T.J.Crowder、スプレッド演算子と比較するとスプレッド構文として呼び出すことで違いがあります! –