js总结

作者: Victor细节 | 来源:发表于2017-01-04 12:02 被阅读0次

    01-集合

    Array
    Set
    Map

    02-遍历

    • 普通for循环
      1.只能遍历字符串和数组
    • for in
      1.可以遍历字符串
      2.专业遍历对象
      3.可以遍历遍历数组
    • for of
      1.遍历字符串
      2.专业遍历数组
      3.遍历集合(Set 和 Map)
      for(var ele of arr){console.log(ele)}//ele直接为元素
    • forEach
      1.遍历数组
      arr.forEach(function(element,index){})
      2.遍历集合
      Set.forEach(function(element1,element2){})
      Map.forEach(function(value,key){})
      不要用for in遍历数组

    for in 语句对数组对象进行遍历潜在的bug在于:如果原生Array类被其他的js脚本库进行了原型扩展(比如多加一个toJSON方法即Array.prototype.toJSON=xxxx),那么用for in遍历扩展后的Array对象的逻辑将与遍历原生Array对象的逻辑发生差异。

    03-异常处理
    当你觉得某些方法可能出现错误的时候来使用
    特点:不会阻塞代码

    • 捕获异常 try..catch..finally
      try{
      //觉得有问题的代码
      }catch(err){
      //捕获err
      console.log(e.toString)
      }finally{
      //无论是否有异常都会走这里
      }
    • 抛异常 throw new Error("阻塞")

    04-js对象指针总结

    栗子:不用new关键词 创建对象的两种方法

        function Person (name){
            //if(this == window){
            //return new Person(name)
            //}
          if(this instanceof Person){
            this.name = name;
            return this;
          }
          return new Person(name);
        }
        var p1 = new Person("猫");
        var p2 = Person("狗");
        console.log(p1.name);
        console.log(p2.name);
    

    05-迭代器
    for..of循环的内部实现

        var str = "欢迎来到北京";
        console.log(String.prototype[Symbol.iterator])  
        String.prototype[Symbol.iterator] = function(){
            var index = 0;
            var self = this;
            return {
                next : function(){
                    return {
                        value : self[index++],
                        done : index - 1 < self.length ? false : true
                    }
                }
            };
        };
        //for (var ele of str) {
        //  console.log(ele);
        //}
        var iteratorStr = str[Symbol.iterator]();
        console.log(iteratorStr.next());
        console.log(iteratorStr.next());
        console.log(iteratorStr.next());
        console.log(iteratorStr.next());
        console.log(iteratorStr.next());
        console.log(iteratorStr.next());
    

    06-自定义对象迭代

        var obj = {
            name:"小雪",
            age:18,
            sex:"女",
            eat:function(){
                console.log("吃");
            }
        };
        Object.prototype[Symbol.iterator] = function(){
            var keysIndex = 0;
            var valueIndex = 0;
            var keysArr = Object.keys(this);
            var valuesArr = Object.values(this);
            
            return {
                next : function(){
                    return {
                        value : valuesArr[valueIndex++],
                        key : keysArr[keysIndex++],
                        done : valueIndex - 1 < keysArr.length ? false : true
                    }
                }
            }
        };
        var iteratorObj = obj[Symbol.iterator]();
        console.log(iteratorObj.next());
        console.log(iteratorObj.next());
        console.log(iteratorObj.next());
        for ( var ele of obj ) {
            console.log(ele);
        }
    
    
    /*
             * 2、自定义构造函数 实现一个和系统自带的Map构造函数相同功能的数据结构
            需要支持get set has delete size属性等功能
            
            */
    
             function MyMap(){
                this.elements = new Array();
                //把参数变成对象放进数组里面
                for(var items of arguments[0]){
                    this.elements.push({
                        key:items[0],
                        value:items[1]
                    })  
                }
                //获取Map元素个数
                this.size = function(){
                    return this.elements.length
                };
                //添加参数
                this.set = function(key,value){
                    this.elements.push({
                        key:key,
                        value:value
                    })
                };
                //获取元素
                this.get = function(key){
                    for(var i = 0 ; i < this.elements.length;i++){
                        if(this.elements[i].key == key){
                            return this.elements[i]["value"];
                        }
                    };
                };
                //删除元素
                this.delete = function(key){
                    for(var i = 0; i < this.elements.length ; i++){
                        if(this.elements[i].key == key){
                            this.elements.splice(i,1);
                        }
                    }
                };
                //判断是否拥有has
                this.has = function(key){
                    for(var i = 0 ; i < this.elements.length ; i++){
                        if(this.elements[i].key == key){
                            return true;
                        }else{
                            return false;
                        }
                    }
                };
            }
             var map = new MyMap([["name","小雪"],["age",18]]);
             map.set("sex","女");
             map.delete("name");
             console.log(map.size());
             console.log(map);
             console.log(map.elements);
             console.log(map.has("age"));
             console.log(map.has("fun"));
             console.log(map.get("age"));

    相关文章

      网友评论

          本文标题:js总结

          本文链接:https://www.haomeiwen.com/subject/csdovttx.html