传播功能意味着什么.正常函数是否可以在javascript中迭代

Abh*_*hek 4 javascript ecmascript-6 spread-syntax

我在控制台中执行类似下面的代码

function add(a,b){return a+b;};
const obj = {...add};
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是它没有抛出错误.也没有

const obj = {...123};
Run Code Online (Sandbox Code Playgroud)

扩展语法应该只适用于可迭代的实体,如对象,数组,字符串,映射,集合等.那么为什么在使用不可迭代的实体时它不会抛出错误?或者我在这里遗漏了什么?

Sur*_*yan 7

JavaScript中的函数也是objects.它有它自己的属性,如name,call,apply等.

这样做const obj = {...add}只是得到枚举的属性function object,把它们放到另一个对象,并分配给obj.你可以通过检查

function add(a,b){return a+b;};
add.test = 1;

const obj = {...add};

console.log('test' in obj);
Run Code Online (Sandbox Code Playgroud)

关于什么123是转换为Number包装,其余是一样的

const obj = {...123};

console.log('valueOf' in obj);
Run Code Online (Sandbox Code Playgroud)