//以前的写法 function add(x, y) { if (typeof x == "undefined") { x = 1 } if (typeof y == "undefined") { y = 1 } return x + y; } console.log(add(0, 1)); // 1 //ES6的写法 :更加简便 function addES6(x = 1, y = 1) { return x + y; } console.log(addES6(5)); // 6
默认格式:
}
【注意】
1.如果参数中有的有默认值有的没有默认值,那么必须将有默认值的放在后面。
function addES6(x=1,y=1){ return x+y; } console.log(addES6());//2
【了解即可】 函数的length属性:没有设置默认值的参数的个数。
// 函数的length属性:没有设置默认值的参数的个数。 function addES6(x = 1, y = 1) { return x + y; } console.log(addES6.length); // 0
二、ES6引入的rest参数
形式为:...变量名
ES6中的可以使用rest参数来替代arguments.
arguments本身是一个对象,不是一个数组,不能使用数组的方法,而rest是一个真正的数组。
rest的语法格式为: 函数(...变量名){ 函数体 }
三、扩展运算符
作用:将数组拆分为多个数组
...运算符
作用:使用逗号拆分数组或对象
格式:...变量
应用:
1.将伪数组转为真正的数组 [...伪数组]
2.合并数组 [...数组1,...数组2]
四、箭头函数
定义:匿名函数表达式的一种方式。
箭头函数的语法格式: (形参)=>{ 函数体 }
声明式函数
// 声明式函数 fn(); //声明式函数 function fn(){ console.log("声明式函数"); }
函数表达式
// 函数表达式 fn1(); // Uncaught TypeError: fn1 is not a function var fn1=function(){ console.log("函数表达式"); }
声明式函数可以直接在使用之前调用,函数表达式创建的函数不能在函数表达式之前调用,会报错显示不是一个函数。
箭头函数
// 箭头函数: var fn2=()=>{ console.log("箭头函数"); } fn2(); //箭头函数
【注意】
2.如果只有一个表达式,可以省略大括号和return,默认返回表达式的结果。
3.箭头函数中没有arguments对象
4.箭头函数中的this由父级作用域决定。
5.箭头函数中的this指向无法被修改(call、apply、bind)
// 如果箭头函数只有一个形参,那么小括号可以省略 var show=value=>{ console.log("箭头函数"); } show();//箭头函数 // 如果只有一个表达式,可以省略大括号和return var show=value=> value+2; // console.log(typeof show); var x=show(1); console.log(x); //3
四、this指向的总结:
1.在全局函数中,this指向window。
3.在构造函数中,this指向实例对象。
4.在事件函数中,this指向事件源。
5.在定时器中,this指向window。
6.在箭头函数中,this指向父作用域中的this。
五、数组的扩展
1. map:映射的意思: 将原数组映射为新的数组。 map必须有返回值,没有返回值,新数组的元素都是undefined
arr = arr.map(item => item * 2); console.log(arr); //[2, 4, 8, 10, 12, 14]
2. Array.form()方法可以将类似于数组的对象转化为真正的数组,比如说伪数组,arguments。
// 如果是一个对象,必须要有length属性才可以转化为数组,
// 如果length比属性个数值多时,多生成的元素输出为undefined
// 如果length比属性个数值少时,多生成的元素输出为undefined
// 2. length比属性个数要少, 只会生成前length个元素,下标从0开始计算到给出的length值
var lis = document.querySelectorAll('li'); console.log(Array.from(lis)); //[li, li, li, li, li] var arrLike = { "1": "h", "2": "e", "3": "l", "4": "l", "0": "o", length: 5 } console.log(Array.from(arrLike)); //["o", "h", "e", "l", "l"]
/* 3. Array.of方法:用于将一组数值转换为数组。目的:创建数组,用来代替new Array();
*/
var arr = Array.of(5, { age: 20 }, true, "20"); console.log(arr); //[5, {…}, true, "20"]0: 51: {age: 20}2: true3: "20"length: 4__proto__: Array(0)
/*
4. copyWithin():在当前数组内部,将指定位置的成员复制到其他位置,复制会替换原有成员,返回当前数组。 会修改原数组。
* 参数:
* 1.(必须)从该位置开始替换数据。
* 2.(可选)从该位置开始读取数据,默认值是0、
* 3.(可选)到该位置停止读取数据。默认值是数组的长度。如果是负数,表示倒数。最后一个值的位置是-1。
*
* 含头不含尾
*/
var arr = [1, 2, 3, 4, 5, 6]; arr.copyWithin(0, 3, arr.length); console.log(arr); // [4, 5, 6, 4, 5, 6]
5. filter(callBack): 遍历过滤出一个新的数组,数组中包含的是返回条件为true的值。
var arr = [1, 2, 3, 4, 5, 6]; var arr2 = arr.filter(item => item > 3) console.log(arr2); // [4, 5, 6]
6. every(callBack) 数组中的元素全部满足判断条件,如果都满足则返回true,否则返回false;
var arr = [1, 2, 3, 4, 5, 6]; var flag = arr.every(item => item > 3); // var flag = arr.every(item => item > 0); // console.log(flag); //true console.log(flag); //false
7. some(callBack) 数组中的元素只要有一个满足判断条件,则返回true,如果都不满足,返回fasle。
var arr1 = [1, 2, 3, 4, 5, 6]; var flag1 = arr1.some(item => item > 3); console.log(flag1); //true var flag1 = arr1.some(item => item > 6); console.log(flag1); //false
8. includes(值) 判断数组中是否有指定的值。如果有,返回true,没有返回false。
include和indexof的区别:indexof返回的是下标,如果要判断是否存在 要与-1比较。
var arr1 = [1, 2, 3, 4, 5, 6]; var flag1 = arr1.includes(6); console.log(flag1); //true
9. find(callBack) :找到第一个符合条件的元素。
var arr1 = [1, 2, 3, 4, 5, 6]; var flag1 = arr1.find(item => item > 5); console.log(flag1); //6
/*10. findindex(callBack):找到第一个符合条件的元素的下标。 */
var arr1 = [1, 2, 3, 4, 5, 6]; var flag1 = arr1.findindex(item => item > 3); console.log(flag1); //3
六、对象的扩展:
属性简写:如果属性值是一个变量,且变量名与属性名相同,则可以只写属性名。
方法简写:
以前的写法: 方法名:function(){}
现在的写法: 方法名(){}
七、数据结构的扩展
ES6提供了两个新的数据结构:Set 和 Map。
1. set:类似于数组。它只有属性值,而且值是唯一的。
利用set里面的值不重复的特性,可以对数组去重。 arr = Array.from(new Set(arr));
var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6]; var set = new Set(arr); arr = Array.from(set); console.log(arr); //[1, 2, 3, 4, 5, 6] 祛除重复的数字
属性:
size: set中元素的个数。
var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6]; var set = new Set(arr); // arr = Array.from(set); // console.log(arr); //[1, 2, 3, 4, 5, 6] console.log(set);
方法:
增:
add(value):将value添加到Set中。返回set本身。
var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6]; var set = new Set(arr); set.add(10); console.log(set); // {1, 2, 3, 4, 5, 6,10}
删:
clear(): 清除所有成员
var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6]; var set = new Set(arr); set.clear(); console.log(set); //{}
delete(value) :删除指定的值
var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6]; var set = new Set(arr); set.delete(3); console.log(set); //{1, 2, 4, 5, 6}
查:
has(value) : 返回一个布尔值,如果value存在在set中,返回true。
var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6]; var set = new Set(arr); console.log(set.has(6)); //true var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6]; var set = new Set(arr); console.log(set.has(18)); //false
遍历set:
for (const 当前遍历的变量 of 要遍历的数据结构) {
}
//iterator:迭代器 // 遍历 var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6]; var set = new Set(arr); for (const iterator of set) { console.log(iterator); }
foreach
var arr = [1, 2, 7, 9, 5, 6, 5, 3, 6]; var set = new Set(arr); set.forEach(element => { console.log(element); });
2. map:由键值对组成的。 不允许键重复,值可以重复。如果键重复了,就会将原来的值覆盖掉。
创建map: new Map();
增:
set(k,v) k可以为任意类型。用的最多的是字符串。v也是可以为任意类型。
let map = new Map(); map.set("偶像", "爱因斯坦"); // map.set("偶像", "张国荣"); console.log(map); //Map(1) {"偶像" => "爱因斯坦"}
//两次输出的k值不能相同,否则会被新的覆盖掉,只显示最新的map.set中的值。 let map = new Map(); map.set("偶像", "爱因斯坦"); map.set("偶像大大", "张国荣"); console.log(map);
@H_96_404@
删:
delete(k)
let map = new Map(); map.set("偶像", "爱因斯坦"); map.set("偶像大大", "张国荣"); map.set("不是偶像", "蔡徐坤"); map.delete("不是偶像"); console.log(map); //Map { "偶像" → "爱因斯坦", "偶像大大" → "张国荣" }
改:
let map = new Map(); map.set("偶像", "爱因斯坦"); map.set("偶像", "蔡元培"); console.log(map); //Map { "偶像" → "蔡元培"}
查:
get(k) k 为要获取数据的k。
let map = new Map(); map.set("偶像", "蔡元培"); map.set("偶像大大", "张国荣"); var result = map.get("偶像"); console.log(result); // 蔡元培
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。