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