1.Date
日期的对象,在JS中通过Date对象来表示一个时间
创建一个当前的时间对象:
let d = new Date();
创建一个指定的时间对象:
let d = new Date("月/日/年 时:分:秒");
name | 功能 |
---|---|
getDate() | 当前日期对象是几日(1-31) |
getDay() | 返回当前日期对象是周几(0-6) 0为周日,1为周1 |
getMonth() | 返回当前日期对象的月份(0-11) 0为一月,1为二月 |
getFullYear() | 从 Date 对象以四位数字返回年份。 |
getHours() | 返回 Date 对象的小时 (0 ~ 23)。 |
getMinutes() | 返回 Date 对象的分钟 (0 ~ 59)。 |
getSeconds() | 返回 Date 对象的秒数 (0 ~ 59)。 |
getMilliseconds() | 返回 Date 对象的毫秒(0 ~ 999)。 |
getTime() | 返回当前日期对象的时间戳。 时间戳,指的是从格林威治时间1970年1月1日 0时0分0秒,到现在时间的毫秒数 计算机底层保存时间都是以时间戳的形式保存的。 |
Date.now() | 可以获取当前代码执行时的时间戳 |
setHours() | 设置 Date 对象中的小时 (0 ~ 23) |
2.Math
Math属于一个工具类,它不需要我们创建对象,它里边封装了属性运算相关的常量和方法。我们可以直接使用它来进行数学运算相关的操作。
方法:
Math.PI 常量,圆周率
Math.abs() 绝对值运算
Math.ceil() 向上取整
Math.floor() 向下取整
Math.round() 四舍五入取整
Math.random() 生成一个0~1之间的随机数,不包括0和1.
Math.round(Math.random()*(y-x)+x); 生成一个x~y之间的随机数。包括x和y。
Math.pow(x,y) 求x的y次幂
Math.sqrt() 对一个数进行开方,即求平方根。
Math.max() 求多个数中最大值
Math.min() 求多个数中的最小值
3.包装类
在JS中为我们提供了三个包装类:
String() Boolean() Number()
通过这三个包装类可以创建基本数据类型的对象
例子:
var num = new Number(2);
var str = new String("hello");
var bool = new Boolean(true);
但是在实际应用中不会这样应用,会出现各种各样的问题,稍作了解即可。
当我们去操作一个基本数据类型的属性和方法时,
解析器会临时将其转换为对应的包装类,然后再去操作属性和方法,
操作完成以后再将这个临时对象进行销毁。
4.字符串的方法
使用ES6中的字符串新方法
String.prototype.padStart(maxLength, fillString='') 或 **String.prototype.padEnd(maxLength, fillString='')**来填充字符串;
方法 | 功能 |
---|---|
length | 获取字符串的长度 |
charAt() | 根据索引获取指定的字符 |
charCodeAt() | 根据索引获取指定字符的字符编码 |
String.fromCharCode() | 根据字符编码获取字符 |
concat | 连接字符串 |
indexOf() | 从前向后检索字符串,如果字符串中有该内容,则返回其第一次出现的索引,如果没有找到指定内容则会返回-1,可以指定第二个参数,表示开始查找的位置。 |
indexOf() | 从后向前 |
slice(start,[end]) | 可以从一个字符串中截取指定的内容,并将截取到内容返回,不会影响原变量 参数: |
spilt() | 可以将一个字符串拆分为一个数组,参数:会根据传入的参数将字符串拆分。 |
substr() | 和slice()基本一致,不同的是它第二个参数不是索引,而是截取的数量 |
substring() | 和slice()基本一致,不同的是它不能接受负值作为参数,如果设置一个负值,则会自动修正为0, substring()中如果第二个参数小于第一个,则会动调整位置,例如substring(1,0)等同于substring(0,1)。 |
toLowerCase() | 将字符串转换为小写并返回 |
toUpperCase() | 将字符串转换为大写并返回 |
5.正则表达式
正则用来定义一些字符串的规则,程序可以根据这些规则来判断一个字符串是否符合规则,也可以将一个字符串中符合规则的内容提取出来。
1.正则表达式语法
(1)创建正则表达式
var reg = new RegExp("正则表达式","匹配模式");
//创建一个正则表达式,匹配字符串中的a字符,i表示匹配模式不区分大小写
let reg = new RegExp("a","i");
console.log(reg); // /a/i
console.log(typeof reg); //object
var reg = /正则表达式/匹配模式 (匹配模式可以多个一起写:/gi)
let reg1 = /a/i;
console.log(reg1); // /a/i
console.log(typeof reg1); //object
匹配模式:i 忽略大小写 j 全局匹配模式。
设置匹配模式时,可以都不设置,也可以设置1个,也可以全设置,设置时没有顺序要求
(2)正则表达式测试方法test()
test() 可以用来检查一个字符串是否符合正则表达式的规则,如果符合返回true,否则返回false。
console.log(reg.test("abc")) //true
console.log(reg.test("Abc")) //true
console.log(reg.test("bc")) //false
(3)正则表达式的语法
| 或
[] 或 即[ab]等同于a|b
let reg = /[ab]/;
console.log(reg.test("ac")) //true
console.log(reg.test("bc")) //true
console.log(reg.test("cd")) //false
// 检查一个字符串中是否含有abc或adc或aec
reg = /a[bde]c/
console.log(reg.test("aec")) //true
[^ ] 除了 [^a]等同于存在除了a以外的其他字符
let reg = /[^a]/;
console.log(reg.test("a")) //true
console.log(reg.test("abc")) //true
[a-z] 小写字母 (也可以[e-i])
[A-Z] 大写字母
[A-z] 任意字母,但是还包括了其他ASCII在此之中的
[0-9] 任意数字 [^0-9]表示除了数字
2.正则表达式和字符串方法
split()
可以根据指定内容将一个字符串拆分为一个数组。
参数:
需要一个字符串作为参数,将会根据字符串去拆分数组。
可以接收一个正则表达式,此时会根据正则表达式去拆分数组。
let str = "1a2s45s6f8f5";
let result = str.split(/[A-z]/);
document.write(result); //1,2,45,6,8,5
match()
可以根据正则表达式,从一个字符串中将符合条件的内容提取出来。
默认情况下我们的match只会找到第一个符合要求的内容,找到以后就停止检索,
我们可以设置正则表达式为全局匹配模式(g),这样就会匹配到所有的内容。
可以为一个正则表达式设置多个匹配模式,且顺序无所谓,即 ig等同于gi
match()会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果。
let str = "1a2b3c4d5e6f7g";
let result = str.match(/[a-z]/g);
document.write(result); //a,b,c,d,e,f,g
document.write("<br>");
result = str.match(/[0-9]/g);
document.write(result); //1,2,3,4,5,6,7
replace()
可以将字符串中指定内容替换为新的内容
参数:
1.被替换的内容,可以接受一个正则表达式作为参数
2.新的内容,空串则为删除""
默认只会替换第一个
let str = "1a2b3c4d5e6f7g";
let result = str.replace(/[a-z]/g,"");
document.write(result); //1234567
search()
可以搜索字符串中是否含有指定内容,如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到返回-1。
它可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串。
serach()只会查找第一个,即使设置全局匹配也没用。
let str = "hello abc hello aec afc";
let result = str.search(/a[bef]c/);
document.write(result); //6
str = "hello hello aec afc";
result = str.search(/a[bef]c/);
document.write(result); //12
str = "hello hello hello afc";
result = str.search(/a[bef]c/);
document.write(result); //18
3.量词
通过量词可以设置一个内容出现的次数。量词只对它前边的一个内容起作用
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。 |
n* | 匹配任何包含零个或多个 n 的字符串。 |
n? | 匹配任何包含零个或一个 n 的字符串。 |
n{x} | 匹配包含 X 个 n 的序列的字符串。 |
n{X,Y} | 匹配包含 X 至 Y 个 n 的序列的字符串。 |
n{X,} | 匹配包含至少 X 个 n 的序列的字符串。 |
n$ | 匹配任何以 n 结尾的字符串。 |
^n | 匹配任何以 n 开头的字符串。 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
表格转载于w3school:JavaScript RegExp 参考手册 (w3school.com.cn)。
判断手机号是否合法:
let PhoneNumber = "13011934214";
/*
手机号规定:1.以1开头 2.第二位不能为0,1,2 3.共11位数字,三位以后可以为任意数字
*/
let reg = /^1[3-9][0-9]{9}$/;
document.write(reg.test(PhoneNumber)); //true
PhoneNumber = "12011934214";
document.write(reg.test(PhoneNumber)); //false
4.元符号
检查一个字符串中是否含有 .
. 表示任意字符
在正则表达式中使用\作为转义字符
. 来表示.
\ 表示\
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行符或行终止符。 |
\w | 查找单词字符。(任意字母、数字和_) [A-z0-9_] |
\W | 查找非单词字符。(除了任意字母、数字和_) [^A-z0-9_] |
\d | 查找数字。 [0-9] |
\D | 查找非数字字符。 [^0-9] |
\s | 查找空白字符。(空格) |
\S | 查找非空白字符。(除了空格) |
\b | 在单词的开头/结尾查找匹配项,开头如下:\bHI,结尾如下:HI\b。 |
\B | 查找匹配项,但不在单词的开头/结尾处。 |
\0 | 查找 NULL 字符。 |
\n | 查找换行符。 |
\f | 查找换页符。 |
\r | 查找回车符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
\xxx | 查找以八进制数 xxx 规定的字符。 |
\xdd | 查找以十六进制数 dd 规定的字符。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
关于元符号小数点(.)。 reg = /\./和 reg = new RegExp("\\.");等同,这是字面量和字符串的区别。
let str = "1325safaf";
reg = /./;
document.write(reg.test(str)); //true
document.write("<br>");
//匹配字符串中是否有.
str = "1325safaf";
reg = /\./;
document.write(reg.test(str)); //false
document.write("<br>");
reg = new RegExp("\\.");
str = "1325safaf";
document.write(reg.test(str)); //false
关于\b,查找单词边界
//查找字符串中是否含有单词child。
let str = "hello child";
reg = /child/;
document.write(reg.test(str)); //true
document.write("<br>");
str = "hello children";
reg = /child/;
document.write(reg.test(str)); //true,但实际上children和child并不是同一单词
document.write("<br>");
str = "hello children";
reg = /\bchild\b/;
document.write(reg.test(str)); //false