2020.12.7 01:42
ES6练习
使用了什么技术/方法==>实现了什么功能(==>做了什么事)
1、下面程序的执行结果是什么?请分析原因?
function f({x=10}={},{y}={y:10}){
console.log(`x:${x},y:${y}`);
}
f();//10,10
f(undefined,undefined);//10,10
f({},undefined); //10,10
f({},{}); //10,undefined
f(undefined,{});//10,undefined
f({x:2},{y:3});//2,3
分析:
{x=10}
的意思是不赋值x或者传x的值为空的情况下x=10
{y}={y:10}
的意思是不赋值y的情况下,y=10
1.f();
不赋值,x和y等于默认值10
2.f(undefined,undefined);
传入undefined等于不赋值(不等于传空值),同1
3.f({},undefined);
传空值x=10,不赋值y=10
4.f({},{});
传空值x=10,传空值y=undefined
5.f(undefined,{});
不赋值x=10,传空值y=undefined
6.f({x:2},{y:3});
有传入值2,x=传入值即x=2,有传入值3,y=传入值即y=3
2.Array.from方法的作用是什么
ES6为Array增加了from函数用来将其他对象转换成数组。
当然,其他对象也是有要求,也不是所有的,可以将两种对象转换成数组。
1.部署了Iterator接口的对象,比如:Set,Map,Array。
2.类数组对象,什么叫类数组对象,就是一个对象必须有length属性,没有length,转出来的就是空数组。
let arr={
0:1,
1:2,
2:3,
length:3
}
console.log(arr);//原类数组
console.log(Array.from(arr));//转化为数组后
console.log(Array.from(arr) instanceof Array);//判断是否是数组
3.Array.of和使用Array()或new Array()构建数组实例有什么区别
Array.of()对new Array()和Array()的扩展 。不论输入什么,都代表的是数组元素。
正常情况下创建数组:
let arr = Array(1, 2, 3, 4)
console.log(arr) // 1, 2, 3, 4
console.log(arr.length) // 4
如果要创建只含有一个元素数组
Array()和new Array()会创建出length为4的空数组
let arr1 = Array(4);
console.log(arr1) // [empty × 4]
console.log(arr1.length) // 4
let arr2=new Array(4);
console.log(arr2) // [empty × 4]
console.log(arr2.length) // 4
用Array.of即可正常创建
let arr3=Array.of(4);
console.log(arr3) // [4]
console.log(arr3.length) // 1
4.下面程序执行结果是什么?
function push(array, ...items){
items.forEach(function(item){
//array=>[1,2] items=>[1,2,3]
array.push(item);
console.log(item);//1,2,3
});
console.log(array);//[1,2,1,2,3]
}
var a=[1,2];
push(a,1,2,3);
分析:
其中a是array,1,2,3是剩余参数
所以array=[1,2] items=[1,2,3]
,forEach遍历的是[1,2,3]
push使用了剩余参数,实现的功能是把所有输入的数据放入数组里面,最终array里是所有实参
实现了非箭头函数自带的arguments功能
5.下面程序执行结果是什么?
const headAndTail=(head,...tail)=>[head,tail];
console.log(headAndTail(6,2,3,4,5));//[6,[2,3,4,5]]
分析:
6是head,2,3,4,5是剩余参数tail
,返回值是[head,tail]
因为剩余参数是数组,所以输出[6,[2,3,4,5,]]
把数组tail放置在一个数组内部,得到的是二维数组
2020.12.7 2:01