传播算子 允许iterable在需要0+个参数的地方展开。它主要用于预期值超过1的变量数组中。它允许我们从数组中获取参数列表。Spread运算符的语法与 静止参数 但它的工作原理与此完全相反。
语法:
var variablename1 = [...value];
在上述语法中, … 是一个扩展运算符,它将针对特定变量中的所有值。当…发生在函数调用或类似调用中时,它被称为扩展运算符。Spread操作符可以在很多情况下使用,比如我们想要的时候 用数学对象展开、复制、合并 .让我们逐一看一看:
笔记 :为了运行本文中的代码,请使用浏览器提供的控制台。
Concat()
javascript提供的concat()方法有助于连接两个或多个字符串(String concat()),或用于合并两个或多个数组。对于数组,此方法不会更改现有数组,而是返回一个新数组。
// normal array concat() method let arr = [1,2,3]; let arr2 = [4,5]; arr = arr.concat(arr2); console.log(arr); // [ 1, 2, 3, 4, 5 ] |
输出: 在spread运算符的帮助下,我们可以实现相同的输出,代码如下所示:
// spread operator doing the concat job let arr = [1,2,3]; let arr2 = [4,5]; arr = [...arr,...arr2]; console.log(arr); // [ 1, 2, 3, 4, 5 ] |
输出: 笔记 :虽然我们可以获得相同的结果,但不建议在这种特殊情况下使用spread,因为对于大型数据集,与本机concat()方法相比,它的工作速度较慢。
复制(如拼接方法)
为了将数组的内容复制到另一个数组,我们可以执行以下操作:
// copying without the spread operator let arr = [ 'a' , 'b' , 'c' ]; let arr2 = arr; console.log(arr2); // [ 'a', 'b', 'c' ] |
输出:
上面的代码可以很好地工作,因为我们可以将一个数组的内容复制到另一个数组,但在后台,这是非常不同的,因为当我们变异新数组时,它也会影响旧数组(我们复制的那个)。请参见下面的代码:
// changed the original array let arr = [ 'a' , 'b' , 'c' ]; let arr2 = arr; arr2.push( 'd' ); console.log(arr2); console.log(arr); // even affected the original array(arr) |
输出:
在上面的代码中,我们可以清楚地看到,当我们试图在数组中插入一个元素时,原始数组也被修改了,这是我们不打算做的,也不推荐做的。在这种情况下,我们可以使用spread运算符,如下所示:
// spread operator for copying let arr = [ 'a' , 'b' , 'c' ]; let arr2 = [...arr]; console.log(arr); // [ 'a', 'b', 'c' ] arr2.push( 'd' ); //inserting an element at the end of arr2 console.log(arr2); // [ 'a', 'b', 'c', 'd' ] console.log(arr); // [ 'a', 'b', 'c' ] |
输出:
通过使用spread运算符,我们确保了无论何时更改新阵列,原始阵列都不会受到影响。
扩大
每当我们想将一个数组扩展到另一个数组时,我们都会这样做:
// normally used expand method let arr = [ 'a' , 'b' ]; let arr2 = [arr, 'c' , 'd' ]; console.log(arr2); // [ [ 'a', 'b' ], 'c', 'd' ] |
输出: 尽管我们在另一个数组中的一个数组中获取内容,但实际上它是另一个数组中的数组,这绝对是我们不想要的。如果我们希望内容位于单个数组中,我们可以使用扩展运算符。
// expand using spread operator let arr = [ 'a' , 'b' ]; let arr2 = [...arr, 'c' , 'd' ]; console.log(arr2); // [ 'a', 'b', 'c', 'd' ] |
输出:
数学
JavaScript中的数学对象具有不同的属性,我们可以利用它来做我们想做的事情,比如从一个数字列表中找出最小值,找到最大值。
console.log(Math.min(1,2,3,-1)); //-1 |
输出: 现在考虑我们有一个数组而不是一个列表,上面的数学对象方法不起作用,将返回Na,比如:
// min in an array using Math.min() let arr = [1,2,3,-1]; console.log(Math.min(arr)); //NaN |
输出: 什么时候 ……啊 在函数调用中使用,它将一个iterable对象arr“扩展”到参数列表中 为了避免这种NaN输出,我们使用了扩展运算符,如:
// with spread let arr = [1,2,3,-1]; console.log(Math.min(...arr)); //-1 |
输出:
对象的扩展运算符示例
ES6增加了 传播 属性设置为javascript中的对象文本。播报员( … )with objects用于创建具有新值或更新值的现有对象的副本,或创建具有更多特性的对象的副本。让我们举一个例子,说明如何在对象上使用spread操作符,
const user1 = { name: 'Jen' , age: 22 }; const clonedUser = { ...user1 }; console.log(clonedUser); |
输出:
我们在这里传播 用户1 对象user1对象的所有键值对都复制到clonedUser对象中。让我们来看另一个使用spread操作符合并两个对象的示例,
const user1 = { name: 'Jen' , age: 22, }; const user2 = { name: "Andrew" , location: "Philadelphia" }; const mergedUsers = {...user1, ...user2}; console.log(mergedUsers) |
输出:
梅格杜塞斯 这是一份 用户1 和 用户2 .实际上,对象上的每个可枚举属性都将复制到mergedUsers对象。spread运算符只是 对象分配() 但是,它们是两者之间的一些差异。
JavaScript最为人所知的是网页开发,但它也用于各种非浏览器环境。通过以下步骤,您可以从头开始学习JavaScript JavaScript教程 和 JavaScript示例 .