2

Spread Operator throws error for float and boolean variable. Is there any specific reason for getting error on float and boolean variable.

// 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);
1
  • 4
    Yes, because you can't iterate over them. What result would you expect from spreading a float for example? Commented Aug 9, 2016 at 11:45

1 Answer 1

8

Is there any specific reason for getting error on float and boolean variable.

Yes: Spread syntax (it isn't an operator) only works with iterable objects (objects that implement iteration). Numbers and booleans are not iterable. Things like arrays and maps and sets are iterable.

console.log(...aVal); asks the JavaScript engine to iterate through aVal and then call console.log with each iterated value as a discrete argument. That is, it asks javaScript to "spread out" that iterable.

Here's an example of spread with an iterable (in this case, an array):

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);

Note how the entries in a are "spread out" into discrete (separate) arguments for foo.


The examples below were from earlier when your question was asking about "the rest operator" by mistake. Just for completeness:

Here's an example of rest syntax (also not an operator) in a function signature:

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

...and rest syntax in a destructuring assignment:

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

Sign up to request clarification or add additional context in comments.

10 Comments

@FelixKling: Yeah, it's syntax, not an operator.
@T.J.Crowder, what is difference by calling as spread syntax when compare to spread operator !!
@Venkatraman: Yup. There is no "spread operator." In fact, there can't be: No operator could do what spread syntax does. People use the term casually, but the spec doesn't, for good reason. Operators take operands and produce a resulting value. There's no value ... could produce in foo(...array) that would then allow foo to be called with discrete arguments. (The spec isn't shy about using the word "operator" for things that actually are operators.)
@FelixKling: Yeah. "Syntax" for the general case, but then more specific for the specific case.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.