ES6(三点运算符、Symbol类型)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ES6(三点运算符、Symbol类型)</title>
</head>
<body>
<script type="text/javascript">
/* es6 三点运算符 可变参数 */
function func(...params) {
console.log(params);
// 遍历
params.forEach(function(item, index) {
console.log(item, index);
});
}
func(2, 4, 5);
// 当然也有可能有固定的几个参数,然后也有不固定参数,这时候固定参数要写前面;
function func2(a, ...params) {
console.log(params);
// 遍历
params.forEach(function(item, index) {
console.log(item, index);
});
}
func2(2, 4, 5);
//es6单点运算符有时候还可以用作合并数组;
let arr1 = [2, 3];
let arr2 = [1, ...arr1, 4];
console.log(arr2);
/* es6 Symbol类型 */
let sb = Symbol();
console.log(sb);
console.log(typeof(sb))
// 每个定义的symbol都是唯一的
let sb2 = Symbol();
console.log(sb == sb2); // 返回false
//Symbol实际使用
// 定义一个对象
let symbol = Symbol('address'); // 可以加参数 指定属性名
let symbol2 = Symbol('address');
let obj = {
name: 'jack',
age: 10
};
// 假如我们要向对象里额外加个属性
// obj.address='南京路' // 以前的写法,不过假如属性很多的时候,可能会出现属性重复
obj[symbol] = '南京路'; // 这样能保证属性不重复
obj[symbol2] = '南京路2';
console.log(obj);
// 因为Symbol具有唯一性,所以我们可以做Symbol定义常量
const System_key = Symbol('114aaa');
console.log(System_key);
// Symbol.for() 全局搜索指定key的Symbol,找到的话,就返回该Symbol,找不到,就新建一个
console.log(Symbol("foo") === Symbol("foo")); // false
console.log(Symbol.for("bar") === Symbol.for("bar")); // true
// Symbol.keyFor() 返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。
let fooKey = Symbol.for("bar1");
console.log(Symbol.keyFor(fooKey)); // 返回bar1
</script>
</body>
</html>
运行结果: