javascript代码实例教程-JavaScript高级程序设计Date类型讲解及面试题

发布时间:2018-12-29 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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,请注明来意。
标签:HTML