这些函数大部分由类和对象(复习)组织,所以又被称之为方法。
比如console.log(),console是类,log()是它的方法。
可以认为Math是一个静态类。
Math类提供的静态方法,常用的有
Math.ceil(Math.random()*1000)
JavaScript奇怪的地方在于,如果我们要四舍五(六)入到n位小数位,需要用到的是包装类Number的实例方法toFixed(n):
7.654.toFixed(2) //"7.65" 7.658.toFixed(2) //"7.66"
更奇怪的是,他们返的是字符串!稍不注意,就会搞出bug来:
3.16.toFixed(1)+1 //结果是多少?
系统当前日期:new Date()
还可以按:年,月,日,小时,分钟,秒……指定的日期:new Date(2019,4,20,.....) ,但是等等,为什么是5月?因为Javascript的月份(注意:仅仅只有月份)是从0开始计数的。
然鹅,new Date()还可以传字符串。试一试:new Date('2019/4/20'),这时候你发现又是4月了,ʅ(‾◡◝)ʃ
拿到一个Date对象,我们就可以调用它的getXXX()方法,获得它的年与日等
new Date().getYear() //121结果不是2021,而是121(@想一想@:为什么?)
new Date().getFullYear()
new Date('2021/4/24').getMonth() //3
相应的,setXXX可用于修改日期,如果指定的日期值 n :
date.setDate(date.getDate()+20)
小技巧:获取某月最后一天 => 先获取该月下个月,然后设置其Date为0:
date.setDate(0);
注意setXXX()有返回值的,返回的是时间戳。该时间戳可以传入new Date()获得对应的时间对象:
new Date(1662362192893);
Date有一个parse()方法,会返回从1970年1月1日零时整的GMT时区开始计时的时间戳(单位:毫秒)。
注意记忆陷阱:getYear()是从1900年起算,但时间戳是从1970年算,(*/ω\*)
//不是0,而是-8*60*60,想一想:为什么? Date.parse(new Date(1970,0,1,0,0,0))
时间戳可以作为参数直接传递给new Date():
new Date(1000*60*60*24)
两个日期直接的差,也是用毫秒表示:然后我们可以再转换成天/小时/分钟/秒等
PS:总体来说,相较于其他语言(Java/C#),JavaScript的日期运算体验是非常差的,所以很多前端开发人员喜欢引入第三方的JS日期库,但每多引入一个外部库,性能就要降低一分,项目结构的复杂度也增加一分,如何权衡,看项目组了……
数组其实是一个Array对象:
let students = new Array(); students[0]="atai";
复习:JavaScript的数组,其实是个链表。
所以其length是可以改变的,会将数组:(演示)
还有以下一些常用方法:(注意方法是改变调用数组,还是返回一个新数组)
[1,18,7,92,2].sort()// [ 1, 18, 2, 7, 92 ] what?因为JavaScript默认的排序规则是“将其视为字符串并按字符集顺序”。要按数值大小排序,可以加一个回调函数:
[1,18,7,92,2].sort(function(a, b){ return a>b ? 1 : -1; //返回值只能是1或-1,不能是bool值 })
字符串可以理解为由单个字符组成的数组(但不是String类对象,在JavaScript中它是值类型数据)。所以它可以像数组一样使用:
但是,注意:字符串是“不可更改(imutable)”的,所以str[3]='x'无效,同样的,以下所有字符串方法都不会修改原字符串,而是返回一个新字符串。
以下方法皆通过字符串对象调用,是实例方法:
'源栈欢迎你'.indexOf('你') //4 '源栈欢迎你'.indexOf('飞哥') //-1
'源栈欢迎你'.substring(2,4) //'欢迎' '源栈欢迎你'.substring(2) //'欢迎你'substring()经常和indexOf()联合使用,@想一想@:干嘛用呢?
'源栈欢迎你'.replace('你','您');
if('FeiGe'.toLowerCase() == 'feige'){
有两种方式获得正则表达式对象:
let regex = new RegExp("\d", "gi");
其中,//后或RegExp()的第二个参数,可以是值为gim的指示标志(在方法中演示区分):
准备数据:
let reg = /\d/gim, str = `http://17bang.ren`;
以下方法是正则表达式对象的实例方法,由正则表达式对象引导(.出来):
exec()可以反复调用,如果需要找到所有匹配项,一般使用while循环:(演示gim,如果没有g的话,不会顺序查找,就会死循环!内存泄露)
//将reg.exec(str)的结果赋值给result let result = reg.exec(str); //使用truthy判断result的值是不是null while (result) { console.log(result.length); console.log(result[0] + ': ' + result.index); result = reg.exec(str); }; //没有匹配之后,result为null console.log(result);
console.log(str.search(reg)); //7
str.match(reg)
let result = str.replace(reg, function (match, index) { //参数match: 匹配成功的字符串 //参数index:字符串所在的位置(索引) //return:用于替换 匹配成功字符串 的字符串 return match.toUpperCase() + 'with index:' + index; });
match如果要获取group的话,必须要使用命名捕获分组
let reg = /Code(?<id>\d+)/gim, str = `/Code/23`;.group.id
有时候我们拿到的数据是一种类型(比如是字符串),但接下来我们要将其“转化”为另外的类型(比如数值)进行运算,这时候就需要进行类型转换。
Javascript的类型转换也让人一言难尽啊!o(╥﹏╥)o
最方便的方式是:+""。
但是JavaScript并不推荐这种(hack)方式,而是搞出了String()和toString()。
toString()友好一些(其他编程语言也有这么一个方法),然鹅也并不好用:null/undefined/{}都无法调用,[]又还能行,唉~~
123.toString() //123.toString():不要问我为什么,因为这就是JavaScript…… 123..toString() (123).toString() null.toString() //报错 [].toString() //返回空字符串 ……String()安全一些,但怪怪的……
也是一样有hack方式+,JavaScript安利的“正规”方法:
常见面试题:parseInt(str)和+str的区别
总体上感觉,
parseInt('32abc') //32 +'32abc' //NaN //然鹅 parseInt('') //NaN +'' //0
parseInt(true) //NaN +true //1 parseInt([]) //NaN +[] //0
parseInt({}) +{} parseInt(undefined) +undefined
+null //0 parseInt(null) //NaN
bool值一般不转换(复习truthy)
字符串转时间,一般用new Date(str)
时间转字符串,要求特定格式,比如2022年8月28日,或2022-8-28:没有现成的,¯\_(ツ)_/¯
进行转换之前,一般都要进行(正则)检验,确保数据可以进行转换,否则很容易埋雷!
本章作业名为:build-in.html
1)Yuanzhan,one of the most famous training course, who aim to provide the best service for those who want to change their life by learning computer program skill was created by Mr. YeFei, who first was a lawyer after graduted from the Southwest University of Political Science and Law with the Economic and Law bachelor degrees in 20 02 but at last came into the IT field as a software developer in 2007.... ..
多快好省!前端后端,线上线下,名师精讲
更多了解 加: