簡體   English   中英

傳播功能意味着什么。 正常函數是否可以在javascript中迭代

[英]What does it mean to spread a function. Are normal functions iterable in javascript

我在控制台中執行類似下面的代碼

function add(a,b){return a+b;};
const obj = {...add};

令我驚訝的是它沒有拋出錯誤。 也沒有

const obj = {...123};

擴展語法應該只適用於可迭代的實體,如對象,數組,字符串,映射,集合等。那么為什么在使用不可迭代的實體時它不會拋出錯誤? 或者我在這里遺漏了什么?

JavaScript中的函數也是objects 它有自己的屬性,如namecallapply等。

執行const obj = {...add}只獲取function object可枚舉屬性,將它們放入另一個對象並分配給obj 你可以通過檢查

 function add(a,b){return a+b;}; add.test = 1; const obj = {...add}; console.log('test' in obj); 

如何將123轉換為Number包裝器,其余部分相同

 const obj = {...123}; console.log('valueOf' in obj); 

你擁有的是一個擴展語法...用於對象文字(在所有用戶代理中都不支持)。

傳播對象文字

ECMAScript提議的Rest / Spread屬性 (階段4)將擴展屬性添加到對象文字 它將自己的可枚舉屬性從提供的對象復制到新對象上。

 function add(a, b) { return a + b; } const obj = { ...add }; console.log(obj); // no properties because no own enumerable properties 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM