使用Float和布尔变量传播运算符问题

时间:2016-08-09 11:34:59

标签: javascript ecmascript-6

Spread Operator抛出float和boolean变量的错误。在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);

1 个答案:

答案 0 :(得分:7)

  

是否有任何特定原因导致浮点和布尔变量出错。

是:Spread语法(它不是运算符)仅适用于iterable个对象(实现迭代的对象)。数字和布尔值不可迭代。像数组,地图和集合这样的东西是可迭代的。

console.log(...aVal);要求JavaScript引擎迭代aVal,然后使用每个迭代值作为离散参数调用console.log。也就是说,它要求javaScript“展开”那个可迭代的。

以下是使用iterable(在本例中为数组)传播的示例:

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

请注意a中的条目如何“展开”为foo的离散(单独)参数。

以下示例来自较早时您的问题是错误地询问“其余操作员”。只是为了完整性:

以下是函数签名中的rest语法(也不是运算符)的示例:

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

...和解构赋值中的rest语法:

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