2014-02-17

前言:

节后的第一周上班,整个状态调整的还不错,已完全进入正常的工作状态。这一周主要还是对年前项目存在的一些问题进行完善、修整,基本上没有做大的改动。这里就把项目中经常用到的一些对Js基本数据类型的一些扩展方法给总结一下,希望对大家有所帮助。

1.    Array的contains方法

Array没有一个contains方法,在现实的应用场景是,有时候我们需要判断某一个值是否

在该数组中,这个时候一个contains方法就显得很有必要,具体实现如下:

//判断数组中是否包含某个元素

Array.prototype.contains = function (obj) {

var i = this.length;

while (i--) {

if (this[i] === obj) {

return true;

}

}

return false;

}

2.    String的contains方法

同样的问题也存在于String类型中,在js中同样也没有一个用来判断某一子串是否包

含在母字符串中的方法,具体实现如下:

//字符串中是否包含某字符串

String.prototype.contains = function contains(string, substr, isIgnoreCase) {

if (isIgnoreCase) {

this = this.toLowerCase();

string = string.toLowerCase();

substr = substr.toLowerCase();

}

var startChar = substr.substring(0, 1);

var strLen = substr.length;

for (var j = 0; j < string.length - strLen + 1; j++) {

if (string.charAt(j) == startChar)//

{

if (string.substring(j, j + strLen) == substr)//

{

return true;

}

}

}

return false;

}

3.    Date的addDays、addMonths、addYear、Format方法

熟悉C#的朋友,都会很熟悉也很享受关于DateTime的一系列的便利的操作,在js中并

没有像C#中那样便利的有关时间的操作,有时候不免会用到时间的加减等相关的交互,这里专门对Date类型进行了扩展,具体如下:

//添加天

Date.prototype.addDays = function (d) {

this.setDate(this.getDate() + d);

};

//添加周

Date.prototype.addWeeks = function (w) {

this.addDays(w * 7);

};

//添加月

Date.prototype.addMonths = function (m) {

var d = this.getDate();

this.setMonth(this.getMonth() + m);

if (this.getDate() < d)

this.setDate(0);

};

//添加年

Date.prototype.addYears = function (y) {

var m = this.getMonth();

this.setFullYear(this.getFullYear() + y);

if (m < this.getMonth()) {

this.setDate(0);

}

};

//日期的格式处理

//日期格式化

Date.prototype.Format = function (fmt) {

var o = {

"M+": this.getMonth() + 1,                 //月份

"d+": this.getDate(),                    //日

"h+": this.getHours(),                   //小时

"m+": this.getMinutes(),                 //分

"s+": this.getSeconds(),                 //秒

"q+": Math.floor((this.getMonth() + 3) / 3), //季度

"S": this.getMilliseconds()             //毫秒

};

if (/(y+)/.test(fmt))

fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));

for (var k in o)

if (new RegExp("(" + k + ")").test(fmt))

fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));

return fmt;

};

4.    Math.max.apply(null,array),求数组中的最大值

该方法主要用来求一个数组中的最大值,这种场景在实际的工作中也会经常用遇到。或

许会有朋友问到,为什么不直接调用Math.max()方法?需要注意的是Math.max()方法支持多个参数的传递,但是它不支持直接传递一个数组作为参数,但是所有的函数都有apply(作用域,参数)这样的一个方法,我们通过apply方法,间接的将数组作为参数,并且将数组中的每个值拆开来传递给了max方法,进而达到了求出最大值的需求。

今天就总结到这里,都是些比较常用的数据类型的扩张,希望能对大家有所帮助。

每日学习心得:Js基本数据类型常用方法扩展的更多相关文章

  1. 每日学习心得:Js获取Checkboxlist所选值、instanceof 和typeof区别、为Array添加contains方法

    2013-11-24 前言: 上周在工作中遇到了一些跟JS以及前台交互的问题,虽然算不上多么高深,但是在解决时也走了一些弯路,所以就总结一下. 1.    JS获取checkboxList所选的值 这 ...

  2. python学习第二天-基本数据类型常用方法

    1.直入主题 python中基本的数据类型有 数字(整形,长整形,浮点型,复数) 字符串 字节串:在介绍字符编码时介绍字节bytes类型 列表 元组 字典 集合 下面我们直接将以下面几个点进行学习 # ...

  3. 每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

    前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoi ...

  4. 每日学习心得:$.extend()方法和(function($){...})(jQuery)详解

    2014-02-09 前言: 节后头两天上班,主要是调整工作状态.项目也不是很紧,趁着周末把年前遇到了一些关于JS和JQuery的一些问题给总结一下.主要是介绍JQuery的extend方法和(fun ...

  5. 每日学习心得:UEditor样式被过滤无法显示问题

    前言: 上周开发中有用到开源的富文本编辑器UEditor,在使用的过程中遇到了样式被过滤无法显示问题,经过一番折腾终解决,此外,还有一些关于获取前台界面元素的一些总结. 1. UEditor样式被过滤 ...

  6. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

  7. 每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容

    前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望 ...

  8. 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)

    2013-8-20 1.    SQL查询表的行列转换/小计/统计(with  rollup,with cube,pivot解析) 在实际的项目开发中有很多项目都会有报表模块,今天就通过一个小的SQL ...

  9. 每日学习心得:Linq解决DataTable按照某一列的值排序问题/DataTable 导出CSV文件/巧用text-overflow解决数据绑定列数据展示过长问题

    2013-8-5 1 Linq解决DataTable按照某一列的值排序 在之前的总结中提到过对拼接而成的复合的DataTable按照某一列值的大小排序,那个主要的思想是在新建表结构时将要排序的那一列的 ...

随机推荐

  1. 0512 Scrum 项目3.0

    SCRUM 流程的步骤2: Spring 计划 1. 确保product backlog井然有序.(参考示例图1) 2. Sprint周期,一个冲刺周期,长度定为两周,本学期还有三个冲刺周期. 3. ...

  2. C# tabconctrol切换事件

    tabconctrol没有click事件,切换page时,调用SelectedIndexChanged事件: private void tabControl1_SelectedIndexChanged ...

  3. Windows Store App 关键帧动画

    关键帧动画和插值动画类似,同样可以根据目标属性值的变化产生相应的动画效果,不同的是,插值动画是在两个属性值之间进行渐变,而关键帧动画打破了仅通过两个属性值控制动画的局限性,它可以在任意多个属性值之间进 ...

  4. C#微信公众号开发-高级接口-之模板消息开发,附源码

    个人觉得模板消息功能的增加对公众号的作用非常大,可以说是真正意义上的实现了所谓的轻app,商家可以通过模板消息给用户发送重要的信息,交易.预约.消费.邮件.物流等信息.之前我做过的系统通过邮件发送订单 ...

  5. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  6. Makefile三个有用变量$@,$^,$<

    $@:目标文件 $^:所有的依赖文件 $<:第一个依赖文件 使用上面三个变量就可以简化我们的Makefile文件: #简化后的Makefile main : main.o log.o test_ ...

  7. sqlserver中创建包含事务的存储过程

    什么是事务     事务时包含1条或多条语句的逻辑单元.事务中的语句是一个整体,要么一起提交,要么一起撤销.事务在提交前可以回滚,一旦提交就不能撤销修改了,是永久性的修改.   为什么使用事务     ...

  8. javascript的坑

    1 for in循环:使用它时,要主要遍历的是所有可枚举的属性(实例以及原型中的属性) function Person(name){ this.name = name; } Person.protot ...

  9. JS判断是否已经到达页面底部

    $(window).scroll(function(){ var scrollTop=$(this).scrollTop(); var scrollHeight=$(document).height( ...

  10. Css中常用中文字体的Unicode编码对照

    在网页制作中,最常用的恐怕是字体属性了,在调整页面兼容的时候,也常常发现字体名称的原因导致不兼容或乱码,下面给出几种常用字体的ucicode编码对照,方便使用. 宋体 SimSun \5B8B\4F5 ...