脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-JavaScript高级程序设计Date类型讲解及面试题,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
5.3 Date类型
(1)创建日期对象,使用new和Date构造函数,在不传参的情况下自动获取当前日期和时间,传参需要是表示该日期的毫秒数
var now = new Date();
(2)Date.parse()接收一个表示日期的字符串,返回相应的毫秒数,如果该字符串不能表示日期则返回NaN
如果向new Date()方法中直接传入字符串,后台也会自动调用date.parse()
注:Date.parse()可以接收的字符串格式"yyyy/MM/dd hh:mm:ss","yyyy-MM-dd hh:mm:ss",不识别"yyyy年MM月dd日 hh
时mm分ss秒"."yyyy-MM-dd hh:mm:ss"这个格式在IE中转换应该存在问题,最好去掉后面的时分秒,改成"yyyy-MM-dd"
(3)Date.UTC()与Date.parse()类似,返回对应的毫秒数,传入的参数分别为年(必传),月(0-11)(必传),日(可选), 时(0-23)(可选),分(可选),秒(可选)。如果向new Date()方法中直接传入对应格式的参数,后台会自动调用 date.UTC();
var currentTime = new Date(Date.UTC(2005,4,5,17,55,55))
var currentTime1 = new Date(2005,4,5,17,55,55);
console.log(currentTime); //Fri May 06 2005 01:55:55 GMT+0800 (中国标准时间)
console.log(currentTime1); // Thu May 05 2005 17:55:55 GMT+0800 (中国标准时间)
注:因为Date.UTC()读取的是0时区的时间,返回的本地时间,而new Date()返回的是本地时间,东八区的时间,所以产
生了区别,相差8小时;0时区加8小时为东八区时间
(4)Date.now(),返回调用此方法时的时间的毫秒数,IE9+支持
注:使用在Date对象前加"+",可使日期变毫秒数 如:var t = +new Date(); console.log(t) //1512875829669
var date1 = new Date(2007,0,1);
var date2 = new Date(2007,1,1);
alert(date1 < date2 );//true
时间之间的比较实际上后台调用了valueOf(),返回的毫秒数进行的比较
3.Date类型转换字符串方法:
(new Date()).toDateString();//"Sun Dec 10 2017"
(new Date()).toTimeString();//"11:29:09 GMT+0800 (中国标准时间)"
(new Date()).toLocaleDateString(); //IEedge: "2017年12月10日" chorme: "2017/12/10"
(new Date()).toLocaleTimeString(); //IEedge: "11:30:17" chorme: "上午11:31:46"
(new Date()).toUTCString(); // "Sun, 10 Dec 2017 03:34:19 GMT" 显示完整的UTC时间(0时区)
(5)其他的Date API
getTime()获取毫秒时间
单位:FullYear Month Date Day Hours Minutes Seconds Milliseconds
1.每个单位,都有一对儿getXXX/setXXX方法
其中getXXX负责获取指定分量的值
setXXX负责修改指定分量的值
特殊: Day星期 没有setXXX
2.命名: 年月日星期 没有s 时分秒毫秒 有s
计算:
1. 两个日期可相减,结果是毫秒差
2. 对任意分量做加减:
1. 取分量: var n=date.getXXX();
2. 做加减: n+/-=?
3. 放回去: date.setXXX(n)
setXXX可自动调整进制
简写: date.setXXX(date.getXXX()+n)
相关推荐:https://www.cnblogs.com/polk6/p/4156595.html
5.4 RegExp类型
(1)字面量形式定义的正则表达式:
var expression = /pattern/flags;
pattern表示正则表达式,flags表示匹配模式:
g:表示全局,应用于所有字符串,并不是找到第一个匹配就停止
i:表示查找时不区分大小写
m:表示多行模式,即查找玩第一行之后是否继续查找第二行
注:(,),{,},[,],/,^,$,|,?,*,+,.符号在模式中需要进行转义,如:[ => /[
如:匹配第一个"[bc]at",不区分大小写 var pattern = //[bc/]at/i;
使用RegExp构造函数定义正则表达式:(接收两个参数,一个为字符串模式,一个是可选的标志字符串)
注:由于传递给构造函数的两个参数都为字符串,所以在某种情况下需要双重转义
匹配第一个"[bc]at",不区分大小写 var pattern = new RegExp('//[bc//]at','i');
(2)RegExp实例属性
global:布尔值,表示是否设置了g标志
ignoreCase:布尔值,表示是否设置了i标志
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起
multiline:布尔值,表示是否设置了m标志
source:正则表达式的字符串表示,按照字面量形式而非构造函数中的字符串模式
(3)RegExp实例方法
pattern.exec(),接收一个字符串作为参数,返回包含第一个匹配项信息的数组,没有匹配项的情况返回null。
返回的数组中包含两个属性:index表示匹配项在字符串中开始的位置,input表示应用正则表达式的字符串
(如果没有捕获组,数组只包含一项)
var text = "mom and dad and baby";
var pattern = /[a,d][n,a]d/ig;
var match1 = pattern.exec(text);
console.log(match1); //["and", index: 4, input: "mom and dad and baby"]
console.log(pattern.lastIndex); //7
match1 = pattern.exec(text);
console.log(match1); //["dad", index: 8, input: "mom and dad and baby"]
console.log(pattern.lastIndex); //11
注:如果没有g标志,每一次执行exec方法时都会从头开始而不会继续从上一次执行后的位置开始。
pattern.lastIndex实际上为index加匹配项长度之后返回的下标
pattern.test("字符串")验证,匹配的情况,返回true,表示字符串中存在;否则返回false,表示字符串中不存在
RegExp实例继承的toLocaleString()和toString()方法都会返回正则表达式的字面量,与创建表达式的方式无关
var pattern = new RegExp("//[bc//]at","ig");
console.log(pattern.toString()); // //[bc/]at/gi
typeof(pattern.toString()); // "string"
console.log(pattern.toLocaleString());// //[bc/]at/gi
typeof(pattern.toLocaleString()); // "string"
console.log(pattern.valueOf()); // //[bc/]at/gi
pattern.valueOf() instanceof RegExp; // true
(4)字符集:规定一位字符可用的备选字符列表,[字符列表],一个字符集只修饰一个字符,只能从字符集中选一个
常见字符集:一个字母:[A-Za-z]
一个数字:[0-9]
一位汉字:[/u4e00-/u9fa5];
注:"除了xxxx" : [^xxx] 如: 除了4和7 [^47] ^必须放在[]内的开头
预定义字符集:常用字符集的简化:
1个数字: /d=>[0-9] 非数字:/D
1个数字,字母,_:/w 非数字字母下划线:/W
1个空字符: /s 非空字符 /S
1个任意字符:.
量词:固定一个字符集出现次数的规则
字符集{m,n} 字符集最少m个,最多n个
字符集{m,} m个以上
字符集{m} 必须m个
字符集? 可有可无,最多1个
字符集* 可有可无,个数不限
字符集+ 至少1个,多了不限
选择和分组:
选择: 规则1|规则2 读作"或"在两个规则中匹配其一即可。
分组: 将一组规则,用()包裹
指定匹配位置:
^ 匹配字符串开头 如: 匹配开头的空字符: ^/s+
$ 匹配字符串结尾 如: 匹配结尾的空字符: /s+$
/b 匹配单词边界 一般成对出现 如:var pattern = //bhello/b/ig ;
面试题:判断一个字符串中出现最多次数的字符
方法1:
var str = "addadddadddfafgg" ;
var arr = str.split("");
arr.sort();
str = arr.join("");
var pattern = /(/w)/1*/g;
var newArr = str.match(pattern);
newArr.sort(function(a,b){
return a.length < b.length;
})
console.log(newArr[0][0] +":"+ newArr[0].length + "次"); //d:8次
方法2:
var str = "addadddadddfafgg" ;
var arr = str.split("");
arr.sort();
str = arr.join("");
var pattern = /(/w)/1*/g;
var value = '';
var index = 0;
str.replace(pattern,function($0,$1){
if(index < $0.length){
index = $0.length;
value = $1;
}
})
console.log('最多的字符:'+value+',重复的次数:'+index); //最多的字符:d,重复的次数:8
注:正则表达式中的小括号"()"代表分组。 如果再其后面出现/1则是代表与第一个小括号中要匹配的内容相同。
/1必须与小括号配合使用
5.4 Function类型
函数声明语法定义:
function sum(num1,num2){
return num1 + num2;
};
函数表达式定义:
var sum = function(num1,num2){
return num1 + num2;
};
区别:函数声明定义法会声明提前到代码顶部
var sum = new Function("param1","param2",...,"return num1 + num2");
可以传入任一个参数,但是最后一个参数,一定是作为函数体(字符串形式),不推荐使用,会解析两次函数,第一次常规
解析,第二次解析传入构造函数中的字符串
(1)函数名本身就是包含指针的变量,所以函数也可以作为值来使用 如:按对象某个属性进行排序
(2)函数内部属性
arguments:类数组对象,包含所有函数中的参数
arguments.callee 该属性为一个指针,指向拥有arguments的函数,消除紧密耦合
function factorial(num){
if(num <= 1){
return 1;
}else{
return num * arguments.callee(num - 1);
}
}
factorial(5);//120
this引用的是函数据以执行的环境对象(在全局作用域中调用函数,this对象引用的是全局对象window)
caller,该属性保存在调用当前函数的函数的引用,如果在全局作用域中调用当前函数,caller为null
function outer(){
inner();
};
function inner(){
alert(arguments.callee.caller);
}
outer(); //function(){inner()};
注:严格模式下,arguments.callee会报错,不能为caller属性赋值
(3)函数属性和方法
函数是对象,所以也有方法和属性
length属性,希望接收的命名参数的个数(内部属性arguments保存的是实际传入的参数,与length不同)
prototype属性,是真正保存所有引用类型实例方法的真正所在,不可枚举,使用for-in无法发现
两个非继承而来的方法:
apply(),call(),实际上等于设置函数体内this对象的值
apply(),接收两个参数,一个是其中运行函数的作用域,一个是参数数组(可以是arguments也可以是Array的实例)
call(),与apply接收参数不同,第一个参数也是this,其余的参数直接传递而不是通过数组的形式(必须明确的传入
第二个以后的参数)
window.color = "red";
var o = {color: "blue"};
function sayColor(){
console.log(this.color);
}
sayColor(); //red
sayColor.call(this) //red
sayColor.call(window); //red
sayColor.call(o); //blue
function sum(num1,num2){
return num1 + num2;
}
function callSum(num1,num2){
// return sum.apply(this,arguments);
// return sum.apply(this,[num1,num2]);
return sum.call(this,num1,num2)
}
callSum(10,20);//30
bind方法:创建了一个函数的实例,同时this会被绑定到传个bind函数的值
window.color = "red";
var o = {color: "blue"};
function sayColor(){
console.log(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue
sayColor调用bind方法并传入对象o,创建了objectSayColor()函数,同时objectSayColor()函数的this值为o,即使全局调用 objectSayColor(),也返回blue
注:(1)IE9+支持bind()
(2)toLocaleString()和toString()都返回函数的代码(格式因浏览器而异)
(3)valueOf(),返回函数代码
5.4 基本包装类型:Boolean,Number,String
创建实例根据传入值得类型返回相应基本包装类型的实例
var strObj = new Object("some text");
var numObj = new Object(14);
var bolObj = new Object(false);
typeof strObj; //"object"
strObj instanceof String; //true
strObj instanceof Object; //true
(1)Boolean类型
var bolObj = new Boolean(true);
typeof bolObj;//"object"
bolObj instanceof Boolean; //true
重写valueOf()方法,返回true或false,重写toString()方法,返回"true"或"false"
(2)Number类型
var numObj = new Number(10);
typeof numObj; //"object"
numObj instanceof Number; //true
重写valueOf(),返回对象表示的基本类型的值,重写toString(),toLocaleSting(),返回对象表示的基本类型的值的字符串形式
注:toString()方法中可以传入参数,返回相应进制的字符串格式 var num = 10; num.toString(2);//1010
1.toFixed(param)方法会按照指定的小数位(param)返回数值的字符串表示(四舍五入)
var num = 10;
num.toFixed(2);//"10.00"
2.toExponential()也接收一个参数,指定输出结果中的小数位数(四舍五入)
var num = 10;
var num1 = 0.1;
num.toExponential(1);//"1.0e+1"
num1.toExponential(1);//"1.0e-1"
3.toPrecision()方法,根据实际情况返回合适的结果,会根据要处理的数值,决定是调用toFixed()还是toExponential()
var num = 99;
num.toPrecision(1); //"1.0e+2";
num.toPrecision(2); //"99"
num.toPrecision(3); //"99.0"
(3)String类型
var strObj = new String("some text");
typeof strObj; //"object"
strObj instanceof String; // true
继承的valueOf(),toString(),toLocaleString()都返回字符串形式
length属性,表示字符串中包含多少个字符(即使字符串中存在双字节字符,仍算一个字符)
1.字符方法
charAt()接收一个参数,即基于0的字符位置,返回给定位置的字符(字符没有字符类型)
charCodeAt()接收一个参数,即基于0的字符位置,返回给定位置的字符编码
var stringValue = "hello world";
console.log(stringValue.charAt(1));//e
console.log(stringValue.charCodeAt(1)); //101
注:不传参,默认第一个位置处
2.字符串操作方法
拼接
concat(),相比之下"+"拼接更常用
截取
slice()substr()substring(),都返回子字符串,可传一到两个参数,第一个参数指定子字符串开始的位置,slice与substring
的第二个参数值指子字符串结束的位置(含头不含尾);substr的第二个参数指截取子字符串的个数,不改变原字符串
如果参数中存在负值,slice会将传入的赋值与length相加,按返回的值去截取;substr将负的第一个参数与length相加,
将负的第二个参数转换为0;substring()会将负的参数全部转换为0
var stringValue = "hello world";
console.log(stringValue.slice(-3)); //"rld"
console.log(stringValue.substr(-3)); //"rld"
console.log(stringValue.substring(-3)); //"hello world"
console.log(stringValue.slice(3,-4)); //"lo w"
console.log(stringValue.substr(3,-4)); //""
console.log(stringValue.substring(3,-4));//"hel"
注:substring(3,-4)相当于substring(3,0),相当于substring(0,3)
3.字符串位置方法
indexOf()和lastIndexOf(),都是从一个字符串中搜索给定字符串,返回子字符串的位置,没找到返回-1。
indexOf()从头找,laseIndex(),从末尾开始找 ,可接收两个参数,第一个为要查找的字符串,第二个为查找的起始位 置,未设置第二个参数,indexOf()会从头找,lastIndexOf()会从尾开始找
4.trim()方法
创建一个字符串的副本,删除前置和后缀的所有空格,返回结果,IE9+支持;
trimLeft()删除字符串开头空格,trimRight()删除字符串末尾空格
var stringValue = " hello world ";
var newString = stringValue.trim();
console.log(newString); //"hello world"
console.log(stringValue);//" hello world "
5.字符串大小写转换法
toLowerCase()和toUpperCase()小写和大写
toLocaleLower()和toUpperCase()针对特定地区的实现
6.字符串的模式匹配法
match(),与exec类似,参数为正则表达式或RegExp对象,返回数组的第一项时与整个模式匹配的字符串,之后的每
一项保存着与正则捕获组匹配的字符串
var text = "cat, bat, sat, fat";
var pattern = /.at/;
var matches = text.match(pattern);
console.log(matches.index); //0
console.log(match[0]);//"cat"
console.log(pattern.lastIndex); //0
search(),参数为正则表达式或RegExp对象,返回字符串中第一个匹配项的索引,没有返回-1;始终是从头向后查
var text = "mom and dad and baby";
text.search(/a/); //4
text.search(/a/); //4
replace(),接收两个参数,第一个可以为RegExp对象或字符串,第二个参数可以是一个字符串也可以是一个函数。
不更改原字符串
如果第一个参数为字符串,那只能替换第一个字符串,替换所有子字符串就需要传正则表达式,指定g
$&: 匹配整个字符串模式的子字符串
$': 匹配的子字符串之前的子字符串
$`: 匹配的子字符之后的子字符串
$n: 匹配第n个捕获组的子字符串
var text = "cat, bat, sat, fat";
text.replace("at","ond"); // "cond, bat, sat, fat"
text.replace(/at/g,"ond"); //"cond, bond, sond, fond"
text.replace(/(.at)/g,"word($1)")//"word(cat), word(bat), word(sat), word(fat)"
如果第二个参数为函数时,回想函数传递3个参数:模式的匹配项(匹配的字符串),第一个捕获组的匹配项,第二个
捕获组的匹配项(没有捕获组就直接不提供捕获组的匹配项)最后两个参数分别为匹配项在字符串中的位置,和原始
字符串函数返回一个字符串
觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!
以上是脚本宝典为你收集整理的javascript代码实例教程-JavaScript高级程序设计Date类型讲解及面试题全部内容,希望文章能够帮你解决javascript代码实例教程-JavaScript高级程序设计Date类型讲解及面试题所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。