zoukankan      html  css  js  c++  java
  • 在Array原型链上扩展remove,contain等方法所遇到的坑

    相信jser兄弟们肯定会碰到这样一个问题,

    在做数组类的操作的时候,会要求删除数组中的一个元素;亦或是判断某值是否存在于这个数组;

    OK,拿删除数组元素举例,扩展方法为:

    Array.prototype.remove = function(val){
        var index = this.indexOf(val);
        if (index > -1) {
            this.splice(index, 1);
        }
    }

    很简单了扩展了一个删除元素的方法,那么我说的坑是什么呢?

    在我们使用for··in 遍历对象的时候是把对象的可枚举属性都遍历了,!!!包括其原型链上的东东(坑!),下面看图说话:

    一张图说明一切了对么?你以后每次使用for···in···进行遍历的时候都会保函在这里所扩展的remove方法,那么解决方案呢?

    判断是否是它私有属性,如果不是就说明不是自己“亲生的”,直接break扔掉;

    ------------------------------------------------------------------------------------------

    以上情况经常出现在字符串模板里面,就是给String扩展一个format方法,如下

    String.prototype.format = function(args) {
                var result = this;
                if (arguments.length < 1) {
                    return result;
                }
    
                var data = arguments; // 如果模板参数是数组
                if (arguments.length == 1 && typeof (args) == "object") {
                    // 如果模板参数是对象
                    data = args;
                }
                for ( var key in data) {
                    if(!data.hasOwnProperty(key))break;
                    var value = data[key];
                    if (undefined != value) {
                        result = result.replaceAll("\{" + key + "\}", value);
                    }
                }
                return result;
            }

    如果没有做处理的话,偶尔碰到莫名其妙的undefined会有点摸不着头脑~~~

  • 相关阅读:
    kail
    scp命令
    搭建LNMP
    PHP7.3.2安装
    nginx的安装
    CentOS7部署NFS
    Linux使用mailx通过外部smtp发邮件
    kickstart自动化安装
    centos7下单用户模式,救援模式的应用以及虚拟机下的克隆
    putty和xsheel远程连接centos7
  • 原文地址:https://www.cnblogs.com/AlexBlogs/p/6141220.html
Copyright © 2011-2022 走看看