美文网首页
《Web前端开发之JavaScript精英课堂》(十)

《Web前端开发之JavaScript精英课堂》(十)

作者: FangZhong | 来源:发表于2018-07-25 22:27 被阅读0次
    深克隆
    function deepClone (origin, target) {
        // 目标,类型判断,数组类型对比
        var target = target || {},
            toStr = Object.prototype.toString(),
            arrStr = '[object Array]';
        // 遍历对象属性
        for (var prop in origin) {
            if (origin.hasOwnPropertyOf(prop)) {
                if (origin[prop] !== null && typeof origin[prop] === 'object') {
                    // 引用类型
                    target[prop] = toStr.call(origin[prop]) === arrStr ? [] : {}
                    deepClone(origin[prop], target[prop]);
                } else {
                    // 原始类型
                    target[prop] = origin[prop];
                }
            }
        }
        return target;
    }
    
    type方法重构
    function type (target) {
        var ret = typeof target;
        var template = {
            '[object Array]': 'array',
            '[object Object]': 'object',
            '[object Number]': 'number - object',
            '[object Boolean]': 'boolean - object',
            '[object String]': 'string - object',
        }
        if (target === null) {
            return 'null'
        } else if (ret === 'object') {
            return template[Object.prototype.toString.call(target)];
        } else {
            return ret;
        }
    }
    
    数组
    • 改变原数组
      • push、pop、unshift、shift、reverse、sort
      • splice
    • 返回新数组
      • split、、、、
    // 有序数组乱序
    [1, 2, 3].sort(function () {
        return 0.5 - Math.random()
    })
    
    类数组
    // 类数组
    var arrLike = {
        '0': 'a',
        '1': 'b',
        '2': 'c',
        'length': 3,
        push: Array.prototype.push,
        splice: Array.prototype.splice,
    }
    
    // 考题
    var obj = {
        2 :'a',
        3: 'b',
        length: 2,
        push: Array.prototype.push,
    }
    
    obj.push('c')
    obj.push('d')
    // {2: "c", 3: "d", length: 4}
    
    数组去重
    Array.prototype.unique = function () {
        var temp = {},
            arr = [],
            len = this.length;
        for (var i = 0; i < len; i++) {
            if (!temp[this[i]]) {
                temp[this[i]] = 'abc';
                arr.push(this[i]);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:《Web前端开发之JavaScript精英课堂》(十)

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