严格模式

严格模式

  • <script type="module">

  • 变量必须定义后使用

  • 不允许参数名重复

    function fn(a,a){
                    console.log(a);
                }
    
                fn(3,5); //不允许
    
  • 严格模式不允许使用with

  • 只读属性都不是能修改

     var obj={};
                Object.defineProperty(obj,"a",{
                    writable:false
                })
                obj.a=10;
    
  • 严格模式八进制不能使用

  • 不能删除不可删除的属性

     var obj={}
                Object.defineProperty(obj,"a",{
                    configurable:false
                });
                delete obj.a;
    
  • 反射 将字符串反射为该字符串变量名的对象

  • eval 和 arguments 不能重新赋值

    • arguments.callee 不能使用

    • arguments.callee.caller 不能使用

  • 在顶层函数中this不能执行window了,是undefined

  • let定义的变量仅在{}作用域内使用,只在语句块状起作用

  • var 和 let可以混合使用

  • const 常量,不可以修改值

const EVENT_ID="event_id";
const EVENT_ID;//不能这样
      const obj={a:1,b:2};
       obj={a:4,b:5};//这样做可以防止obj的引用地址发生改变
       obj.a=10;
       obj=null;//会一直存在堆中,无法销毁
  • 箭头函数

    • 如果函数中仅有一句话,并且这句话是return返回可以省略{}和return
            var fn=(a,b)=>a+b;
    
    等同于
            var fn=function(a,b){
                return a+b;
            } 
    
    • 箭头函数中如果仅有一个参数可以省略小括号

    • 如果没有参数,或者由一个以上的参数不能省略小括号

      if(arr.every(item=>item>0)){
      
              }
      
              var bool=arr.every(function(item){
                  return item>0
              });
              if(bool){
      
              }
      
      var arr=arr.filter(item=>item>3);
             console.log(arr);
      
      
      var sum=arr.reduce((value,item)=>value+=item);
              console.log(sum);
       
       
       arr.sort((a,b)=>b-a);
              console.log(arr);倒序
        
        
        setInterval(()=>{
      
              },16)
      
var obj={
            a:function(){
                // ES5的方法
                console.log("a")
            },
            b(){
                // ES6的方法
                console.log("b");
            },
            c:()=>{
                // ES6箭头函数
                console.log("c");
            }
        }
        obj.a();
        obj.b();
        obj.c(); 
        

document.addEventListener("click",e=>{

        })
  • 箭头函数主要可以作为改变函数中this的指向问题

    var obj={
                b:1,
                a:function(){
                    document.obj=this;
                    var fn=(e)=>{
                        console.log(this);//当函数换为箭头函数时,
                        // this将会被指向当前函数外this的指向
                        this.clickHandler(e);
                      
                    }
    
                    var fn=function(e){
                        console.log(this);//点击的事件对象
                    }
                    document.addEventListener("click",fn);
                    document.addEventListener("click",e=>this.clickHandler(e));
                    this.c();
                },
                clickHandler(e){
                    console.log(this);//obj
                    // e.currentTarget 
                    document.removeEventListener("click",this.clickHandler);
                },
                c:function(){
                    console.log(this);
                },
                d:()=>{
                    console.log(this);
                }
             }
            obj.a();
            obj.d();
    
  • 解构赋值

    • 数组解析最重要的是按位解析

    • 对象是按照属性名解析

    • 参数解构赋值后可以跳位,不需要按照顺序写

    • 将加载进来的对象中方法解构出来形成全局的函数

     var {a,b,c}={b:10,a:20,c:30};
            console.log(a,b,c);//20 10 30
           
           
     function fn({a,b=3,c}){
           console.log(a,b,c);
       }
            fn({a:10,c:20});
    

  • 字符串扩展方法

    • 判断字符在字符串中是否存在

      var str="ashdjsahdwi";
              console.log(str.indexOf("j")>-1);
              console.log(str.search(/j/)>-1);
              console.log(str.match(/j/));
              console.log(/j/.test(str));
              console.log(str.includes("j"));
      
    • 判断a是不是从头开始

      console.log("abcde".startsWith("a"))
      
    • 判断从第1位开始的是不是b

    console.log("abcde".startsWith("b",1));
    
    • 字符串重复

      console.log("ab".repeat(3));
      
    • 字符串.padStart(长度,前面补充的字符);

    • 字符串.padEnd(长度,后面补充的字符);

       console.log("#abcde".padStart(7,Math.floor(Math.random()*16).toString(16)));
             console.log("#abcde".padEnd(7,Math.floor(Math.random()*16).toString(16)));
             console.log("#"+Math.floor(Math.random()*0xFFFFFF).toString(16).padStart(6,0))
      
  • Symbol

    • 唯一,创建的永远没有相同的

    • 去除魔术字符串

    • 对象键值对中键可以是字符型也可以是Symbol型

       var a="abc";
            const KEY_1=Symbol();
            var obj={
                [a]:10,
                [KEY_1]:100
            } //   这个键名就不会被覆盖
            console.log(obj[KEY_1]);
          obj.abc=200;
          console.log(obj);
      
  • Set

    • Set数据类型 无重复列表类型

    • Set没有下标,不是按照下标存储,有序,不能使用下标循环遍历

    • 插入速度和删除速度非常快

    • 没有重复元素,任何元素存在唯一性,遍历查找速度也非常快,但是略低于键值对类型

    • 判断这个元素是否在列表中存在

      console.log(ab.has(3));
      
    • 清除所有数据

      ab.clear();
      
    • set中size就是长度,没有length

      console.log(ab.size);
      
    • Set使用场景

      var manager={
                  list:[],
                  add(elem){
                      if(this.list.indexOf(elem)>-1) return;
                      this.list.push(elem);
                  },
                  remove(elem){
                      var index=this.list.indexOf(elem);
                      if(index<0) return;
                      this.list.splice(index,1);
                  },
                  update(){
                      for(var i=0;i<this.list.length;i++){
                          this.list[i].update();
                      }
                  }
      
              } 
            等同
            var manager={
                  list:new Set(),
                  add(elem){
                      this.list.add(elem);
                  },
                  remove(elem){
                      this.list.delete(elem);
                  },
                  update(){
                      for(let value of this.list){
                          value.update();
                      }
                  }
      
              }
      
  • Map

    • map是一种由长度的键值对数据结构

    • hashMap 键值对的数据类型

    • 具备数组的长度紧密型,又具备对象的键值对方法

    • 它的获取,删除,查询,遍历速度很快

       var map=new Map();
              map.set("name","xietian");
              map.set("age",30);
      
      • 删除键名

         map.delete("name");
        
      • 清除掉所有数据

        map.clear();
        
      • 获取某个键的值

        console.log(map.get("age"))
        
      • 判断某个键是否存在

        console.log(map.has("age"));
        
      • 获取所有值的列表

        console.log(map.values());
        
      • 获取所有键的列表

        console.log(map.keys());
        
      • map遍历

         map.forEach(function(value,key,map){
                    console.log(value,key);
                }) 
        
      • 任何类型都可以作为键使用

      • WeakSet WeakMap 弱引用类型,

      • 弱引用,就是如果其中的强引用的类型地址设置为null,弱引用的关系会自动解除。

      • 弱引用的类型不可以遍历

      • WeakMap 存储的key必须是对象

        
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值