1. 参数处理
参数默认值: a. 基本使用方法; b. 在默认值中使用其他变量。 如:1 2 3 4 5 6 7 8 9 10 function fn (a=1 ,b=2 ,c=3 ){ console .log (a,b,c); } fn (); function fn (a=1 ,b=2 ,c=3 ){ console .log (a,b,c); } fn (10 );
惰性求值 为什么会有惰性求值,其原因就是因为提高它的性能 。 如:1 2 3 4 5 6 7 8 9 function value ( ){ return 20 ; } function fn (a=value(),b=2 ,c=3 ){ console .log (a,b,c); } fn (10 );
在默认值中使用其他变量 如:1 2 3 4 function fn (a=1 ,b=a ){ console .log (a,b); } fn ();
在上面代码中我们需要注意括号中的值是从左到右执行的,下面我再来给大家举一个例子:1 2 3 4 function fn (a=b,b=1 ){ console .log (a,b); } fn ();
下面还要再给大家举一个易错的例子:1 2 3 4 5 6 7 8 9 const c = 3 ; functiono fn (a=c,b=1 ){ const c = 4 ; console .log (a,b); } fn ();
2. 剩余运算符(…)
剩余运算符(…)的作用 把散列的元素变成一个集合。
剩余运算符(…)的场景 在函数或者解构中使用 如在函数中使用:1 2 3 4 5 6 7 8 9 10 function add (...arr ){ console .log (arr); } add (1 ,2 ,3 ); function add (a,...arr ){ console .log (a,arr); } add (1 ,2 ,3 );
如在解构中使用:1 2 3 4 5 6 let [a,...b] = [1 ,2 ,3 ];console .log (a,b); let {a,b,...c} = {a : 1 ,b : 2 ,c : 3 ,d : 4 };console .log (a,b,c);
3. 扩展运算符(…)
扩展运算符(…)的作用 把一个集合变成散元素。
扩展运算符(…)的场景 函数参数传递,数组和对象的复制。 如在函数参数传递中使用:1 2 3 4 function fn (a,b,c ){ console .log (a,b,c); } fn (...[1 ,2 ,3 ]);
如数组的复制:
注意:复制的数组改变,不会影响到原来的数组。
1 2 3 4 5 6 7 8 9 let arr = [1 ,2 ,3 ];let arr2 = [...arr];console .log (arr2); let arr = [1 ,2 ,3 ];let arr1 = [...arr,4 ,5 ,6 ];console .log (arr1);
如对象的复制:
1 2 3 let obj = {a : 1 ,b : 2 ,c : 3 };let obj2 = {...obj};console .log (obj2);
对于剩余运算符和扩展运算符的一个简单总结: 扩展运算符:…[1,2,3] —> 1,2,3 剩余运算符:…1,2,3 —> [1,2,3]
4. 模拟命名参数 使用对象的解构赋值来模拟命名参数。 如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 function fn ({start,end} ){ console .log (start,end); } fn ({start : 1 ,end : 2 }); function fn ({start=1 ,end=2 } ){ console .log (start,end); } fn ({}); function fn ({start=1 ,end=2 } ){ console .log (start,end); } fn ();
5. 数字操作 新的Number方法: 以前方法的移植;合理误差范围;判断是否为整型;安全整数的相应方法。 如: a. Number.isNaN(1); b. Number.isFinite(‘123’); c. Number.parseFloat(); d. Number.parseInt();
6. 模块化 一说到模块化,不得不说的就是箭头函数,它是一个语义化的函数。
基本语法:()=>{} 如:1 2 3 4 var foo1 = (a,b )=>{ console .log (a,b); } foo1 (1 ,2 );
使用箭头函数需要注意: a. 如果参数只有一个的话,我们的小括号可以省略; b. 如果参数只有0个或者2个及2个以上的话,我们的小括号必须有; c. 如果大括号里面只有1条语句的时候,大括号可以省略,大括号被省略时,如果这1条语句中有return的话,return也必须省略; d. 如果大括号里面的语句两条及以上的时候,不可以省略大括号。
下面给大家分享一个易错的知识点,先看如下代码:1 2 3 4 5 6 var sum = ( )=>({name : 'a' });
箭头函数和函数的区别和注意事项 a. this指向问题:在箭头函数中是没有 this指向的,this是借助父级作用域中的this指向,你通过call等方法改变它的this指向都是不好使 的。 b. 不能 使用arguments。 c. 不能 当做构造函数。