• ES6...


    js由三部分组成: ECMAScript  +  DOM (document对象)   +BOM (window对象) 
    
    

    ES6

    1 严格模式  
    2 对象的扩展 
    3 let 和 const 
    4 Object.keys()
    5 for ... of
    6 扩展运算符
    7 set和map
    8 模板字符串 `${name}`
    9 默认参数
    10 rest参数(可变参数)
    11 箭头函数
    12 解构赋值
    13 异常处理 try-catch
    

    1 严格模式

    作用:可以帮你写出更安全的js代码,如果未按照规定写,则提前报错异常

    语法:

    "use strict"
     位置:可以是全局,可以是局部
    

    1 变量必须先声明才能使用

        "use strict"
         a=1; //Uncaught ReferenceError: a is not defined
    

    2 函数的参数不能同名

        "use strict"
    
        function f(a,a){  //Uncaught SyntaxError: Duplicate parameter name not allowed in this context
            console.log(a,a);
        }
    
        f(1,2)
    

    3 不能修改arguments

    Uncaught SyntaxError: Unexpected eval or arguments in strict mode 
    
        "use strict"
        function f(){
            //伪数组,关键词,能够存储传递进来的参数
            console.log(arguments);
            arguments=100;
            // for(let i=0;i

    2 对象的扩展

       let user={
            name:"张三", 
            write:function(){  //es5的写法
                console.log("鞋子");
            },
            read(){  //es6的写法
                console.log("读书");
            }
       }
    

    3 let 和 const

    var 和 let 和 const区别

    var  变量提升     分为全局和局部作用域    能够重复定义
    
    let/const 没有变量提升     作用域是块及的    不能够重复定义   TDZ(暂时性死区 )
    
    
    // TDZ
    console.log(a);
    let a=100;
    

    补充

    函数分为声明式和表达式:
    声明式:function f(){}
    表达式:var f=function(){}  类似于 var 变量 =值
    
    var 变量提升, 声明式函数也能够提升 ,并且优先级: 声明式函数 》  var  
    
    let a=b=c=1;等同于 ;let a=1 ;b=1;c=1
    

    4 Object.keys()

    用来遍历对象属性,类似于 for–in

    let obj={
        name:"张三",
        age:19
    }
    
    let arr=Object.keys(obj)
    console.log(arr);
    arr.forEach(k=>{
        console.log(k,obj[k]);
    })
    

    面试题:

    for循环    forEach    map  性能优先级
    
    for   》  forEach   》Map (返回数组)
    
    

    5 for…of

    特点: 
    1 里面的v就直接代表每一个元素
    2 没有下标
    
    let arr=[2,3,4,5]
    for(let v of arr){
        console.log(v);
    }
    

    6 默认参数

    1 默认参数是用来描述形参

    2 直接在形参后面添加 = 默认值即可

    3 生效条件:实参没有传值或者传递了一个undefined

    function f(a=10,b=10,c=20){
        console.log(a,b,c);//1  10  2
    }
    f(1,undefined,2)
    

    7 可变参数

    1 和arguments类似,当要传递的参数个数未知时,可以使用可变参数

    2 可变参数能够把传递进来的值放进真实的数组

    3 如果没有传递任何参数,则可变参数的值就是一个空[]

    4 如果形参既有普通参数又有可变参数,则可变参数只能放到最后

    5 可变参数不能由默认值

    function f(...a){
        console.log(a); // [1,2,3,4]
    }
    
    f(1,2,3,4)
    

    8 箭头函数

    8.1 关于形参问题

    //无参时
    let f=()=>{
        console.log("ok");
    }
    
    
    //有一个形参时
    let f2=(a)=>{
        console.log(a);
    }
    //简写
    let f2_1=a=>{
        console.log(a);
    }
    
    
    //当有>1个参数时
    let f3=(a,b)=>{
        console.log(a,b);
    }
    

    8.2 返回值问题

    
    let f=()=>{
        return "ok"
    }
    //简写({return } 都必须省略)
    let f2=()=>"ok"
    

    回顾拷贝

    1 拷贝分为浅拷贝和深拷贝
    2 无论是浅拷贝还是深拷贝,两个对象地址是不同的
    3 浅拷贝:如果里面有引用类型的属性或元素,则拷贝的是地址
      深拷贝:如果里面有引用类型的属性或元素,则拷贝的是内容
      	方法1(推荐): 递归
      	方法2(简单但有瑕疵):JSON.parse(JSON.stringify(源数据))
      		如果属性带有正则表达式、日期
      	
    

    9 扩展运算符

    概念:能够把数据展开的运算符,能够用于数组或对象
    
    语法:  ...数组  /   ...对象
    

    作用1:浅拷贝

    let arr=[1,2,3]
    let arr2=[...arr]
    

    面试题:能够用哪些方法来实现浅拷贝

    1 =
    2 concat
    3 ...
    

    Demo

    let arr1=[1,2,{name:"张三"},[99,100]];
    let arr2=[...arr1]
    
    // arr2[2].name='李四';//arr1受到影响
    // arr2[2]='李四';//arr1不受影响
    console.log(arr1);
    

    作用2:合并

    数组

    let arr1=[1,2]
    let arr2=[5,6]
    let arr3=[...arr1,...arr2]
    console.log(arr3);  
    

    对象:

    let u1={
        name:"张三",
        age:18,
        dog:{
            type:"金毛"
        }
    }
    
    let u2={
        name:"李思",
        address:"重庆",
        dog:{
            type:"泰迪"
        }
    }
    
    let u3={...u1,...u2}
    

    Set和Map

    es6提供了新的数据结构

    Set

    概念:类似于数组,是用来存储数据的
    特点:元素是唯一(自带去重功能)
    基本用法:
    
    //实例化
    let s=new Set();
    //添加
    s.add("a")
    s.add("b")
    s.add("A")
    s.add("c")
    s.add({})
    s.add({})
    
    //转为数组
    let arr=[...s];
    console.log(arr); 
    

    已知数组,如何快速去重

    let arr=[1,3,"a",'b','b',3,6]
    let s=new Set(arr);
    arr=[...s];
    console.log(arr);
    

    Map

    概念:类似于对象,和对象最大的区别就是,k可以是任意类型
    存储方式:k-v 键值对
    特点:k不能重复,v可以重复
    

    用法:

    //实例化对象
    let m=new Map();
    
    //添加
    m.set("a","a")
    m.set(1,"b")
    let u={};
    let arr=[]
    m.set(u,"c")
    m.set(arr,"a")
    
    //根据k得v
    console.log(m.get(u));
    //获取长度
    console.log(m.size);
    
    
    //遍历
    m.forEach((v,k)=>{
        console.log(k+":"+v);
    })
    

    解构赋值

    demo

    let arr=[1,2,3]
    要求,分别把每个元素赋值给三个变量
    let a=arr[0]
    let b=arr[1]
    let c=arr[2]
    
    很麻烦,为了精简,可以通过解构赋值
    

    语法:

    =左边是要赋值的变量
    =右边是确确实实的值
    =左右两边结构必须匹配
    
    let [] =[]   --按照数组的元素顺序赋值
    let {} ={}   --按照k的匹配赋值
    

    demo:

    数组:

    // let [a,b,c] = [1,2,3]
    // console.log(a,b,c);
    
    
    
    // let [a,,b]=[1,2,3]
    // console.log(a,b);//1 3
    
    // let [a,b]=[1,2,3]
    // console.log(a,b);//1  2
    
    // let [a,b,c]=[1,2]
    // console.log(a,b,c); //1 2 undefined
    
    
    //  let [a,b,c=10]=[1,2,undefined]
    //  console.log(a,b,c); //1 2 10
    
    
    // let [a,...b]=[1,2,3,4]
    // console.log(a,b);//1  [2,3,4]
    
        
    // let  [a,b] = [1,2] 
    
    // function f([a,b]){
    //     console.log(a,b); 
    // }
    // f([1,2])
    
    
    
    
    // let [a,[b],c]=[1,[2,3],4]
    // console.log(a,b,c);  //  1   2   4
    

    对象:

    let {name:name,age:age} ={name:"张三",age:18}
    console.log(name,age);
    
    //简写
    
    // let {name,age} ={name:"张三",age:18}
    // console.log(name,age);
    

    单词

    SyntaxError  语法错误 
    Duplicate  重复
    
  • 相关阅读:
    Nodejs+vue热门游戏网游推荐网站系统 s5832
    【SA8295P 源码分析】103 - QNX DDR RAM 内存布局分析
    怎样才能让客户自愿帮忙推广产品?
    【完整解析】2024电工杯数学建模A题论文与代码
    融云视频会议,助力政企高效协同
    HDFS的高级功能
    面向对象编程原则(09)——迪米特法则
    当代工业设计体系里的思维导图
    基于SSM的学生社团管理系统 毕业设计-附源码211531
    《idea 骚操作》
  • 原文地址:https://blog.csdn.net/weixin_55101030/article/details/127051284