es6-数组,函数,对象学习总结

一、数组拓展

1.Array.of()
1 {
2     // Array.of  将一组数据转换成数组
3     var arr = Array.of(3,4,2,5);
4     console.log('arr: ',arr);
5     var empty = Array.of();   //空数组
6     console.log(empty)
7 }
2.Array.from()
 1 {
 2     //Array.from   将伪数组,集合转换为真正的数组,如document.querySelectorAll,p标签返回的集合
 3     let p =document.querySelectorAll('p');
 4     let pArr = Array.from(p);
 5     console.log(pArr)
 6     pArr.forEach(function(item){
 7         console.log(item.textContent);  //textContent是js原生获取dom节点文本内容
 8     })
 9 
10     //Array.from   有类似map功能
11     console.log(Array.from([1,3,5],function(item){return item*2}))   //把每个数组遍历输出
12 }
3.fill填充数组
1 {
2     //fill 填充数组
3     console.log('fill-7',[1,'s',undefined].fill(7)) 
4 
5     console.log('fill,pos',['a','s',6].fill(7,1,2))  //fill参数依次对应,填充值,填充起始位置,填充截止位置
6 }
4.获取数组下标和值
 1 {
 2 
 3     for(let index of ['a','f','s'].keys()){    //keys 下标
 4         console.log('keys:',index)
 5     }
 6     for(let value of ['a','f','s'].values()){   //values 取值
 7         console.log('value',value)
 8     }
 9     for(let [index,value] of ['a','f','s'].entries()){   //entries 能取到下标和值
10         console.log(index,value)
11     }
12 }
5.其它API
 1 {
 2     // 在当前数组内部,把指定位置的成员复制到其它位置,使用频率不高
 3     console.log([1,2,3,4,5].copyWithin(1,4,5))   //copyWithin参数依次表示 替换位置,替换值开始读取的位置,替换值结束读取的位置   【1,5,3,4,5】
 4 }
 5 {
 6     // 查找一个元素是否在数组内,可以写函数
 7 
 8     console.log([1,2,3,4,5].find(function(item){return item > 3}))  //4  只返回查找到的第一个元素
 9     console.log([1,2,3,4,5].findIndex(function(item){return item > 3}))  //3 只返回查找到的第一个元素下标
10 }
11 
12 {
13     //includes 包括了对NaN的判断
14     console.log('number',[1,2,NaN].includes(1))   //true
15     console.log('number',[1,2,NaN].includes(NaN))  //true
16     console.log('number',[1,2,NaN].includes('s'))  //true
17 }

二、函数拓展

1.函数参数默认值
1 {
2     function test(x,y='world'){   //默认值后面不能再有没有默认值的变量
3         console.log('say',x,y)
4     }
5     test('hello');
6     test('hello','kitty');
7 }
2.作用域
 1 {
 2     //作用域的问题
 3     let x='test';
 4     function test(x,y=x){
 5         console.log('scope:',x,y)
 6     }
 7     test('kill');         //kill  kill
 8     test();             //undefined undefined
 9 
10     function test2(c,y=x){
11         console.log('scope:',c,y)
12     }
13     test2('kill');        //kill , test
14 }
3.rest参数
1 {
2     //将一列参数转换成数组
3     function test3(...arg){   //rest参数,后面不能有其它参数
4         for(let v of arg){
5             console.log('rest',v)
6         }
7     }
8     test3(1,2,3,4)
9 }
4.扩展运算符
1 {
2     // 扩展运算符 将数组转换成离散值,rest的逆运用
3     console.log(...[1,2,3])
4     console.log('a',...[1,2,3])
5 }
5.箭头函数
1 {
2     // 箭头函数,使用箭头函数时,需要注意this指向
3 
4 // this绑定(箭头函数在定义时的所在),ES5 this是函数被调用时的所在
5     let arrow = v => v*2;    //函数名,函数参数,返回值
6     let arrow2 = () => 5;     //没有参数时,写个圆括号
7     console.log('arrow',arrow(3))  //6
8     console.log('arrow2',arrow2())   //5
9 }
6.伪调用
 1 {
 2     // 伪调用,在最后一步调用函数,提高性能
 3     function tail(x){
 4         console.log('tail',x)
 5     }
 6     function fx(x){
 7         return tail(x);    //在最后一步调用函数
 8     }
 9     fx(111)         //111
10 }

三、对象

1.简洁表示
 1 {
 2     let o=1;
 3     let k=2;
 4     let es5 ={
 5         o:o,
 6         k:k
 7     };
 8     let es6={
 9         o,
10         k
11     };
12     console.log(es5,es6)
13 
14     // 对象中有方法
15     let es5_method={
16         hello:function(){
17             console.log('hello')
18         }
19     }
20     let es6_method={
21         hello(){
22             console.log('hello')
23         }
24     }
25     console.log(es5_method.hello(),es6_method.hello())
26 }
View Code
2.属性表达式
 1 {
 2     // 属性表达式,用[]表示,属性是可变的
 3     let a='b';
 4     let es5_obj={
 5         a:'c',
 6         b:'c'
 7     };
 8     let es6_obj={
 9         [a]:'c'    //key值可以是一个变量或者表达式
10     };
11     console.log(es5_obj,es6_obj)
12 }
3.新增API
 1 {
 2     // is判断两个值是否完全相等,与===一样
 3     console.log('string',Object.is('abc','abc'),'abc'==='abc') //true true
 4     console.log('array',Object.is([],[]),[]===[])  //false  false  引用类型
 5     // 拷贝 assign,浅拷贝
 6     // assign拷贝的是自身对象的属性(如果对象只有继承,他不会拷贝继承的属性),也不会拷贝不可枚举的属性。 
 7     // js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等 
 8     console.log('copy',Object.assign({a:'a'},{b:'b'}));
 9     // entries
10     let test={k:123,o:456}
11     for(let [key,value] of Object.entries(test)){  //与数组类似,数组:test.entries()
12         console.log([key,value])
13     }
14 }

 

posted @ 2019-12-06 17:11  木汐a  阅读(187)  评论(0)    收藏  举报