Js基本数据类型常用方法扩展
- JS中substring与substr的区别
之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为这两种方法的使用时一样的。这样就直接按照在C#中使用Substring的方式,直接在js中用了substring,在实际的项目中,有时候能得到正确的结果,但是有时候得到的结果却让人匪夷所思,后来仔细的调试跟踪之后才发现,原来是Js中substring的方法跟C#中的Substring方法不一样。关于C# 中的字符串截取方法已经很简单了,这里就不再叙述了。主要讲一个js中的substring方法,顺便再讲一下substr方法。
Substring:
该方法可以有一个参数也可以有两个参数。
l 一个参数:
示例: var str=“Olive”;
str.substring(3);
结果:“ve”
说明:当substring只有一个参数时,参数表示从字符串的第几位开始截取,
直截取到字符串结尾。
l 两个参数:
示例:var str=“Olive”;
1) Str.substring(3,4);
2) Str.substring(3,2);
结果:1) “v” 2) 0
说明:当substring有两个参数时,第一个参数表示从字符串的第几位开始截取,第二个参数表示截取到字符串的第几位。这点是个C#中字符截取不同的一点,所以才会导致不同的结果。
Substr:
该方法也可以有一个或两个参数。
l 一个参数:
说明:substr一个参数时,作用跟substring方法一个参数时一样。
l 两个参数:
示例:var str=“Olive”;
1) Str.substr(3,2);
2) Str.substr(3,4);
结果:1) “ve” 2) “ve”
说明:substr有两个参数时,第一个参数表示从字符串的第几位开始截取,第二个参数表示截取多少位字符串。这点跟C#中字符截取相同的,所以在以后的使用中,如果想要避免出现截取的问题最好还是使用substr。
- 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) { //author: meizz
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方法,进而达到了求出最大值的需求。