📜  JavaScript |扩展运算符

📅  最后修改于: 2022-05-13 01:58:10.128000             🧑  作者: Mango

JavaScript |扩展运算符

扩展运算符允许迭代在预期有 0+ 个参数的地方展开。它主要用于预期值超过 1 个的变量数组中。它允许我们从数组中获取参数列表。 Spread运算符的语法与 Rest 参数相同,但它的工作方式完全相反。

句法:

var variablename1 = [...value]; 

在上述语法中, ...是扩展运算符,它将针对特定变量中的所有值。当 ... 出现在函数调用或类似的情况下,它被称为扩展运算符。扩展运算符可以在很多情况下使用,比如当我们想要扩展、复制、合并、使用数学对象时。让我们一一看一下:

注意:为了运行本文中的代码,请使用浏览器提供的控制台。

连接()

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 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 ]

输出:

注意:虽然我们可以达到相同的结果,但不建议在这种特殊情况下使用传播,因为对于大型数据集,与原生 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 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' ]

输出:

通过使用扩展运算符,我们确保在更改新数组时不会影响原始数组。

扩张

每当我们想将一个数组扩展成另一个数组时,我们都会这样做:

// 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 中的 Math 对象具有不同的属性,我们可以利用这些属性来做我们想做的事情,比如从数字列表中找到最小值、找到最大值等。考虑我们想要从数字列表中找到最小值的情况,我们会写这样的东西:

console.log(Math.min(1,2,3,-1)); //-1 

输出:

现在考虑我们有一个数组而不是一个列表,上面的 Math 对象方法将不起作用并且将返回 NaN,例如:

// min in an array using Math.min()
let arr = [1,2,3,-1];
console.log(Math.min(arr)); //NaN

输出:

当在函数调用中使用...arr时,它会将可迭代对象 arr “扩展”到参数列表中
为了避免这种 NaN 输出,我们使用扩展运算符,例如:

// with spread 
let arr = [1,2,3,-1];
  
console.log(Math.min(...arr)); //-1

输出:

带对象的扩展运算符示例

ES6 为 javascript 中的对象字面量添加了扩展属性。带有对象的扩展运算符( ... ) 用于创建具有新值或更新值的现有对象的副本,或者用于制作具有更多属性的对象的副本。让我们举个例子,说明如何在对象上使用扩展运算符,

const user1 = {
    name: 'Jen',
    age: 22
};
  
const clonedUser = { ...user1 };
console.log(clonedUser);

输出:

在这里,我们传播user1对象。 user1 对象的所有键值对都复制到 clonedUser 对象中。让我们看另一个使用扩展运算符符合并两个对象的示例,

const user1 = {
    name: 'Jen',
    age: 22,
};
  
const user2 = {
    name: "Andrew",
    location: "Philadelphia" 
};
  
const mergedUsers = {...user1, ...user2};
console.log(mergedUsers)

输出:

mergeUsersuser1user2的副本。实际上,对象上的每个可枚举属性都将被复制到 mergeUsers 对象。扩展运算符只是Object.assign()方法的简写,但它们是两者之间的一些区别。

JavaScript 以网页开发而闻名,但它也用于各种非浏览器环境。您可以按照这个 JavaScript 教程和 JavaScript 示例从头开始学习 JavaScript。