zoukankan      html  css  js  c++  java
  • 【前端开发】ES6知识点系统化梳理笔记

    >ES6扩展:
    #Map和Set是es6标准新增的数据类型
    
    ##Map是key-value(关键字-值),Map允许修改value,不允许修改key,Map支持下标操作
    var m = new Map([['zhangsan',20],['lisi',25],['wangwu',19]]);
    m.get('lisi') //25
    
    ##Set是key(关键字),Set的迭代器是const,不允许修改元素值,Set不支持下标操作
    var m = new Set([1,2,3,4,3,2]);
    m // Set{1,2,3,4}
    
    #Symbol  
    typeof Symbol  代表独一无二的值;
    避免键名重复被覆盖;
    无法进行字符串拼接和数字的计算;
    可以转布尔型;
    
    #find
    发现数组中满足条件的第一个
    var m = [10,20,30,60,26,50];
    var n = m.find(function(item){
        return item > 50
    })
    console.log(n) // 60  取数组中第一个满足条件的
    
    #findIndex
    发现数组中满足条件的第一个数的下标序号
    var m = [10,20,30,60,26,50];
    var n = m.findIndex(function(item){
        return item > 50
    })
    console.log(n) // 3  取数组中第一个满足条件的位置下标
    
    !! 转换为布尔值
    
    #判断是否数组:
    Array.isArray([])
    
    #1、数组新增:
    var arr = new Array(10,20,30) 可以多项也不可以一项,一项数据时返回代表的是长度10;
    var arr = Array.of(20,10,30)  可以多项也可以一项;
    #2、字符串新增;
    2.1字符串中是否存在
    ES5:
    var str=“abcdefg”;
    console.log( str.indexOf('c') !== -1)    //true   若该indexOf检索的下标值不等于-1则证明存在;
    ES6:
    str.includes('c')  //true 若存在为true否则false
    str.startsWith('ab')  //true  若是ab开头则true  否则false
    str.endsWith('fg')  //true  若是fg结尾则true  否则false
    2.2字符串重复拷贝
    console.log(str.repeat(3))  //abcdefgabcdefgabcdefg  重复拷贝
    2.3超级字符串:
    反引号包起来(换行生效和空格会生效)
    反引号中间拼接变量${name}
    var n = 2;
    var m  = 3;
    console.log('n+m=${n+m}') 这里是反引号包裹
    var isRaining = true 
    console.log('今天天气是${isRaining ? "雨天" : "晴天"}')   这里是反引号包裹
    
    function fn (){
      return "miaov"
    }
    console.log('fn执行结果是:${ fn() }')  //函数也可以放反引号里执行
    #3、对象新增:
    3.1对象键名和键值相同可缩写:
    var a=1;
    var obj = {a};
    console.log(obj) //a:1
    3.2函数调用:
    var obj = {
        a,
        fn(){
            console.log("执行了")
        },
        b:100
    };
    obj.fn();
    3.3键名动态改变:
    var attrname = "width";
    var obj={
        [attrname]:100
    }
     console.log(obj)  //键名随着attrname变化而变化
    3.4函数名动态改变:
    var attrFn = "fn";
    var obj = {
        [attrFn](){
            console.log("attrFn执行了")
        }
    }
    obj.fn();
    3.5判断值是否完全相等
    console.log(1 == "1") //true 隐式类型转换
    console.log(NaN === NaN) //false  es5的不足
    console.log(Object.is(1,1)) //true   es6 相当于 ===  
    console.log(Object.is(1,"1")) //false   即判断类型又判断值是否相等
    console.log(Object.is(NaN,NaN)) //true   解决es5的不足之处
    console.log(Object.is({},{})) //false  {}为两个值
    var obj={};
    console.log(Object.is(obj,obj)) //true  obj为一个对象
    3.6 Object.assign()对象参数合并
    function move(obj){
        var defaultObj = {
            ease : "linear",
            duration:1000
        }
    <!--     var para = {
            ease:obj.ease || defaultObj.ease,
            duration:obj.duration || defaultObj.duratio
        } -->
        var para = {};
        Object.assign(para,defaultObj,obj)  //es6新属性  合并对象参数,后面依次合并到第一个参数,重复参数后面会覆盖前面的
        console.log(para)
    }
    move({
        ease:"easeIn",
        duration:2000
    })
    3.7for of 对象遍历(Object.keys(obj))
    var obj={
        a:1,
        b:2
    }
    console.log(Object.keys(obj)) // [a,b]
    console.log(Object.values(obj)) //[1,2]
    for(var attr of Object.values(obj)){
        console.log(attr) //1 2
    }
    
    console.log(Object.entries(obj)) //解构成二维数组
    for(var [key,val] of Object.entries(obj)){
         console.log(key,val) //分别取值 a 1 b 2
    }
    3.8 ES6扩展运算符
    var a = {
      a:1,
      b:2
    }
    
    var c = {
    ...a,
    f:9999,
    g:8888
    }
    console.log(c) //{a: 1, b: 2, f: 9999, g: 8888}
    ...obj 打散成参数的形式
    var arr = [1,2,3,4];
    console.log(arr) //[1,2,3,4]
    console.log(...arr) //1 2 3 4
    使用场景----数组取最大值
    var arr = [1,23,4,5];
    console.log(Math.max(1,23,4,5)) //23  参数形式是可以取到
    console.log(Math.max(...arr)) //23 先用...扩展用算符转成参数形式即可
    使用场景---数组去重
    var aa = [1,2,3,2,4,5,2,3,1];
    var bb = [...new Set(aa)] //先Set去重然后...运算符打散最后数组[]
    console.log(bb) //[1,2,3,4,5]
    #4、函数的扩展
    ##4.1 函数传递参数默认值设置
    ES5写法:
    function add(a,b){
    var _b = b === undefined ? 100 : b ;
    return a+_b 
    }
    console.log(add(10,0))
    
    ES6写法:
    function add(a,b=100){
        return a+b
    }
    console.log(add(10,0))
    ##4.2函数剩余参数
    function fn(a,...r){
    console.log(a,r) // 1 [2,3,4,5] ...r扩展运算符合并剩余参数为一个数组
    console.log(r) // [2,3,4,5] 
    
    }
    fn(1,2,3,4,5)
    ##4.3箭头函数
    var add = (a,b) => {
        return a+b
    }
    add();
    省略写法
    var add = (a,b) => a+b //语句只有一句时省略{}和return
    var add = (a,b) => ({miaov:3}) //{miaov:3} 想要返回对象需用()包起来
    其他变体写法
    var add = ()=>{
        miaov:for(var i = 0; i<10;i++){
            console.log(i)
            if(i == 3){
                break miaov;
            }
        }
    }
    add()
    
    参数只有一个时,可省略()
    var add = a => a*100
    console.log(add(2)) //200
    
    筛选需要的数
    var arr = [10,21,32,44,77];
    var res = arr.filter(item=> item >21)
    console.log(res)
    
    箭头函数注意事项:
    (1).内部this指向window,对于箭头函数修改this指向是没有用的(普通函数随着点击有可能是document,所以非箭头函数要注意this指向问题);
    (2).箭头函数内部没有arguments,可用(...r)模拟使用;
    (3).箭头函数不能通过new调用,无构造器;
    #5、模块化开发
    模块开发加type="module",且本地服务访问才生效
    <script src="./data.js" type="module"> </script> 
    import {n} from "./data.js";
    ##模块化开发语法
    第一种 导出变量和函数
    var n = 100;
    var m = 20;
    function(x,y){
        return x+y
    }
    export { n as newN,m,add}
    html中使用
    import {newN,m,add} from "./a.js";
    
    第二种 直接导出变量
    exprot var n = 200;
    import {n} from "./a.js";
    
    第三种 直接导出函数
    exprot function fn(){
        console.log(1)
    };
    import {fn} from "./a.js";
    
    第四种 默认导出
    var n = 100;
    var m = 20;
    function(x,y){
        return x+y
    }
    export default 1000;
    
    import d from "./a.js";
    
    //全部导出
    import * as tool from "./a.js"
    用法
    consoe.log(tool.m,tool.newN,tool.default)
    
    只导入模块
    console.log("a.js被加载")
    import "./a.js"
    
    模块化注意:
    1、引入计算多次,模块只执行加载一次;
    2、导出来的值是模块里的值的引用;
    
    #6、promise
    ##promise基础
    1、异步编程解决方案;
    ##promise的基本使用
    宏任务先执行,后微任务,最后定时器
     var都是宏任务   .then(微任务)
        var p = new Promise((resolve,reject)=>{
                    console.log("实例化...")
                    return resolve("成功!");    
                    // reject("失败了")
                   console.log("shibai")
                })
                p.then((data)=>{
                    console.log("then",data)
                }).catch((data)=>{
                    console.log(data)
                })
    使用方法:
    Promise.all  全部执行完才返回
    Promise.race  返回最先执行完的
    
    #7、其他扩展总结:
    
    之前嵌套的代码可用fn(a,b,c).then(()=>fn(a,b,c)).then(()=>fn(a,b,c))的形式比价简洁易维护了
    
    选择器选取元素
    document.getElementById  动态获取元素  会随着元素变化而变化
    document.querySelector  静态获取元素 不会随着元素变化而变化
    
    数字加undefined  结果为 NaN
    
    字符串+undefined  结果是拼接起来ssundefined
    
    var fn = function(a,b,c){
        console.log(arguments)  //参数集合
    }
    fn(1,2,3)
    
    document.onclick = fn; //点击html页面即可触发
  • 相关阅读:
    一篇文章让你搞懂原型和原型链
    数据库命令
    python序列(十)字典
    华为路由器基础知识和命令
    python列表(九)元组
    python初学者-计算小于100的最大素数
    python初学者-计算1-99奇数的和
    python初学者-使用for循环用四位数组成不同的数
    python初学者-使用for循环做一个九九乘法表
    python初学者-使用if条件语句判断成绩等级
  • 原文地址:https://www.cnblogs.com/xiaohuizhang/p/11721496.html
Copyright © 2011-2022 走看看