整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript 里三个点 ...,可不是省略号

JavaScript 里三个点 ...,可不是省略号啊···

文分享自华为云社区《JavaScript 里三个点 ... 的用法-云社区-华为云》,作者: Jerry Wang 。

静止参数

使用 rest 参数,我们可以将任意数量的参数收集到一个数组中,然后用它们做我们想做的事情。引入了其余参数以减少由参数引起的样板代码。

function myFunc(a, b, ...args) {

console.log(a); // 22

console.log(b); // 98

console.log(args); // [43, 3, 26]

};

myFunc(22, 98, 43, 3, 26);

在 myFunc 的最后一个以 ...为前缀的参数中,这将导致所有剩余的参数都放在 javascript 数组中。

rest 参数收集所有剩余的参数,因此在最后一个参数之前添加 rest 参数是没有意义的。其余参数必须是最后一个形参。

rest 参数可以解构(仅限数组),这意味着它们的数据可以解包为不同的变量。

function myFunc(...[x, y, z]) {

return x * y* z;

}

myFunc(1) // NaN

myFunc(1, 2, 3) // 6

myFunc(1, 2, 3, 4) // 6 (fourth parameter is not destructured)

点差运算符

展开运算符用于将可迭代对象(如数组)的元素扩展到可以容纳多个元素的位置。

function myFunc(x, y, ...params) { // used rest operator here

console.log(x);

console.log(y);

console.log(params);

}

var inputs=["a", "b", "c", "d", "e", "f"];

myFunc(...inputs); // used spread operator here

// "a"

// "b"

// ["c", "d", "e", "f"]

一直有多种组合数组的方法,但是扩展运算符提供了一种用于组合数组的新方法:

const featured=['Deep Dish', 'Pepperoni', 'Hawaiian'];

const specialty=['Meatzza', 'Spicy Mama', 'Margherita'];

const pizzas=[...featured, 'veg pizza', ...specialty];

console.log(pizzas); // 'Deep Dish', 'Pepperoni', 'Hawaiian', 'veg pizza', 'Meatzza', 'Spicy Mama', 'Margherita'

使用扩展运算符,现在可以使用比 Object.assign() 更短的语法进行浅克隆(不包括原型)或合并对象。

var obj1={ foo: 'bar', x: 42 };

var obj2={ foo: 'baz', y: 13 };

var clonedObj={ ...obj1 };

// Object { foo: "bar", x: 42 }

var mergedObj={ ...obj1, ...obj2 };

// Object { foo: "baz", x: 42, y: 13 }

总结

当我们在代码中看到三个点 (...) 时,它要么是 rest 参数,要么是展开运算符。

有一个简单的方法来区分它们:

  • 当三个点 (...) 位于函数参数的末尾时,它是“rest 参数”并将参数列表的其余部分收集到一个数组中。
  • 当三个点 (...) 出现在函数调用或类似函数中时,它被称为“扩展运算符”并将数组扩展为 list.

点击下方关注,第一时间了解华为云新鲜技术~

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

个点(...)是扩展运算符,是ES6语法,它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开;还可以在构造字面量对象时将对象表达式按照key-value的方式展开。说白了就是把数组中大括号([])、对象中花括号({})去掉!

//数组
var nums=[1, 2, 3, 4, 5]
console.log(...nums) 
//1 2 3 4 5

//对象
var person={ name: 'A', age: 30 }
console.log({ ...person }) 
// {name:'A',age:30}

它有什么用呢?

  • 数组或对象的复制
//数组的复制
var arr1=['hello']
var arr2=[...arr1]
console.log(arr2) 
// ['hello']

//对象的复制
var obj1={ name: 'A' }
var obj2={ ...obj1 }
console.log(obj2) 
// {name:'A'}
  • 数组或对象合并
//数组的合并
var arr1=['hello']
var arr2=['world']
var mergeArr=[...arr1, ...arr2]
console.log(mergeArr)
// ['hello','world']

// 对象合并
var obj1={ name: 'A' }
var obj2={ age: 30 }
var mergeObj={ ...obj1, ...obj2 }
console.log(mergeObj) 
// {name: "A", age: 30}
  • 字符转数组用它

、页面内跳转的锚点设置

页面内的跳转需要两步:

方法一:

①:设置一个锚点链接<a href="#miao">去找喵星人</a>;(注意:href属性的属性值最前面要加#)

②:在页面中需要的位置设置锚点<a name="miao"></a>;(注意:a标签中要写一个name属性,属性值要与①中的href的属性值一样,不加#)标签中按需填写必要的文字,一般不写内容

方法二:

①:同方法一的①

②:设置锚点的位置 <h3 id="miao">喵星人基地</h3>;在要跳转到的位置的标签中添加一个id属性,属性值与①中href的属性值一样,不加#

方法二不用单独添加一个a标签来专门设置锚点 ,只在需要的位置的标签中添加一个id即可。

小案例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<title>萌宠集结号</title>

</head>

<body>

<ul>

<li><a href="#miao">去找喵星人</a></li>

<li><a href="#wang">去找汪星人</a></li>

<li><a href="#meng">其他萌物</a></li>

</ul>

<a name="miao"></a><!--设置锚点方法1-->

<h3 id="miao">喵星人基地</h3><!--设置锚点方法2-->

<p>喵喵喵~</p>

<p>喵喵喵~</p>

<p>喵喵喵~</p>

<p>喵喵喵~</p>

<p>喵喵喵~</p>

<p>喵喵喵~</p>

<a name="wang"></a>

<p>汪汪汪~</p>

<p>汪汪汪~</p>

<p>汪汪汪~</p>

<p>汪汪汪~</p>

<p>汪汪汪~</p>

<p>汪汪汪~</p>

<a name="meng"></a>

<p>萌萌萌~</p>

<p>萌萌萌~</p>

<p>萌萌萌~</p>

<p>萌萌萌~</p>

<p>萌萌萌~</p>

<p>萌萌萌~</p>

</body>

</html>

二、跨页面跳转

①:设置锚点链接,在href中的路径后面追加:#+锚点名,即可

如:<a href="萌宠集结号.html#miao">跳转到萌宠集结号页面</a>

②:要跳转到的页面中要设置锚点,方法见一种的步骤②,两个方法任选其一。