我对ES2015中的spread语法和rest参数感到困惑.任何人都能用适当的例子来解释它们之间的区别吗?
SpreadElement[Yield]:
...AssignmentExpression[In, ?Yield]
Run Code Online (Sandbox Code Playgroud)
这与Spread语法相同
扩展语法允许在可能需要零个或多个参数(用于函数调用)或元素(用于数组文字)的位置扩展数组表达式或字符串等可迭代的值,或者在零或更多的位置扩展对象表达式键值对(对象文字)是预期的.
句法
对于函数调用:
Run Code Online (Sandbox Code Playgroud)myFunction(...iterableObj);对于数组文字:
Run Code Online (Sandbox Code Playgroud)[...iterableObj, 4, 5, 6]
在MDN文档中描述?
什么是SpreadElement和/或扩展语法的用例; 如果SpreadElement和传播语法不同,它们的具体方式有何不同?
尝试使用值分配新数组.
情况1 :
var x = new Array(3).map(()=>1);
Run Code Online (Sandbox Code Playgroud)
现在x是[undefined * 3]
案例2:
var x = [...new Array(3)].map(()=>1);
Run Code Online (Sandbox Code Playgroud)
现在x是[1,1,1]
有人可以帮忙吗?
为什么使用这个扩展运算符会产生这样的差异
为什么案例1 不起作用?
我有一个相当深的interface声明,看起来像这样:
export interface Job {
JobId: JobId; // type JobId = string
UserId: UserId; // type UserId = string
JobName: string;
AudioFile: JobAudioFile; // this is an interface
Status: JobStatus; // this is an enum
Tracks: JobTracks[]; // 'JobTracks' is an enum
Results: JobResults; // this is an interface
Timestamps: JobTimestamps // interface
}
Run Code Online (Sandbox Code Playgroud)
这个接口的大多数成员本身就是接口,一般架构遵循这种使用枚举,字符串,数组和更多接口的模式.所有代码都是作为TypeScript编写的,编译成JS并作为JS上传到AWS.(节点8.10正在AWS上运行)
在代码中的某一点,我需要制作一个Job作为函数参数传入的实例化的深层副本:
export const StartPipeline: Handler = async (
event: PipelineEvent
): Promise<PipelineEvent> => {
console.log('StartPipeline Event: %o', event);
const newBucket = …Run Code Online (Sandbox Code Playgroud) 这是我尝试过的:
let a = [[1,2], [3,4]];
a.map(val => ...val)
// => SyntaxError: expected expression, got '...'
// Expected output: [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
我尝试使用明确的return声明和带有括号的周围值,但没有任何效果......
我只是想知道是否有一种简单的方法来返回“扩展数组”?
编辑:现在我已经看到了这个问题,它对扩展运算符的工作原理有精确的了解,尽管它并没有真正回答如何“展平”数组的问题(我修改了问题的标题)。
我在React应用程序中注意到以下内容:
<UserList
{...{ userIdsTyping, users }}
/>
Run Code Online (Sandbox Code Playgroud)
到底在{...{ userIdsTyping, users }}做什么?我知道它将子节点传递给UserList组件,但是传播运算符如何在这里工作?它有什么作用userIdsTyping和users?
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);
Run Code Online (Sandbox Code Playgroud)