符号参数的使用
1.rest的作用
ES6引入rest参数,用于获取函数的实参,用来替代arguments
function fn(a,b,...args){
console.log(a);
console.log(b);
console.log(args);
}
fn(1,2,3,4,5,6);
2.symbol的基本使用
介绍:ES6引入了一种新的数据类型symbol来表示独一无二
的值,它是javascript语言的第七种数据类型,是一种类似于字符串的数据类型。
特点:1.symbol的值是唯一的,用来解决命名冲突的问题
2.symbol值不能与其他数据进行运算
3.symbol定义的对象属性不能使用for...in循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名。
symbol给对象添加属性。
let game{
name:'狼人杀',
[Symbol('say'):function(){
console.log('说话');
}],
[Symbol('kill'):function(){
console.log('kill people');
}]
}
这样就完成了给game添加Symbol类型的属性。
3.迭代器
在 JavaScript 中,迭代器是一个对象,它定义一个序列,并在终止时可能返回一个返回值。 更具体地说,迭代器是通过使用 next()方法实现 Iterator protocol 的任何一个对象,该方法返回具有两个属性的对象: value,这是序列中的 next 值;和 done ,如果已经迭代到序列中的最后一个值,则它为 true 。如果 value 和 done 一起存在,则它是迭代器的返回值。
工作原理:
迭代器对象可以通过重复调用 next()显式地迭代。 迭代一个迭代器被称为消耗了这个迭代器,因为它通常只能执行一次。 在产生终止值之后,对 next()的额外调用应该继续返回{done:true}。
<script>
const banji = {
name: '1',
mate: ['zhangfei', 'guanyu', 'liubei'],
[Symbol.iterator]() {
let that = this;
let index = 0;
return {
next: function () {
if (index < that.mate.length) {
const result = {
value: that.mate[index],
done: false
}
index++;
return result;
} else {
return {
value: undefined,
done: true
}
}
}
}
}
}
// 此时banji并不是一个迭代器,需要创建api接口
// 现在要遍历mate属性
for (atri of banji) {
// for...of 是得到遍历属性的键名
// for...in是的到遍历属性的键值
console.log(atri);
}
</script>
完成了迭代器来遍历对象中的属性里面的数据的操作。