博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Array原型链上扩展remove,contain等方法所遇到的坑
阅读量:6829 次
发布时间:2019-06-26

本文共 1277 字,大约阅读时间需要 4 分钟。

hot3.png

相信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会有点摸不着头脑~~~

转载于:https://my.oschina.net/u/268088/blog/1813974

你可能感兴趣的文章
Java 复用类
查看>>
[CS] 来电处理流程
查看>>
我的友情链接
查看>>
cin.ignore与cin.getline的体验
查看>>
powershell常用命令
查看>>
我的友情链接
查看>>
linux 查看编码格式、用户及组状态
查看>>
squid FATAL: Received Segment Violation...dying.
查看>>
mem调优
查看>>
内核编译安装学习笔记
查看>>
做好数据备份 对你多重要
查看>>
Maven项目导出工程依赖JAR包
查看>>
tomcat修改时区
查看>>
dojo.declare,dojo.define,dojo.require解释
查看>>
浏览器的重绘与重排
查看>>
Web开发必知的八种隔离级别
查看>>
酷炫的显示主页面
查看>>
org.apache.catalina.startup.Catalina start之过程分析
查看>>
CAA如何进行干涉检查?
查看>>
silverlight vs flash
查看>>