一、Date
- 日期的对象,在JS中通过
Date对象
来表示一个时间 - 创建对象
创建一个当前的时间对象
var d = new Date();
创建一个指定的时间对象
var d = new Date("月/日/年 时:分:秒");
方法:
getDate()
当前日期对象是几日(1-31)
getDay()
- 返回当前日期对象是周几(0-6)
0 周日
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日 0时0分0秒,到现在时间的毫秒数
- 计算机底层保存时间都是以时间戳的形式保存的
Date.now()
- 可以获取当前代码执行时的时间戳
示例:
//利用时间戳来测试代码的执行的性能
//获取当前的时间戳
var start = Date.now();
for(var i=0 ; i<100 ; i++){
console.log(i);
}
var end = Date.now();
console.log("执行了:"+(end - start)+"毫秒");
二、Math
-
Math和其他的对象不同,它不是一个构造函数,它属于一个工具类
不用创建对象
,它里边封装了数学运算相关的属性和方法。我们可以直接使用它来进行数学运算相关的操作
。 -
方法:
Math.PI
常量,圆周率
Math.abs()
绝对值运算
Math.ceil()
向上取整
Math.floor()
向下取整
Math.round()
四舍五入取整
Math.random()
默认生成一个0-1之间的随机数
生成一个x-y之间的随机数:
Math.round(Math.random()*(y-x)+x);
Math.pow(x,y)
求x的y次幂
Math.sqrt()
对一个数进行开方
Math.max()
求多个数中最大值
Math.min()
求多个数中的最小值
三、包装类
- 在JS中为我们提供了三个包装类:
String() Boolean() Number() - 通过这三个包装类可以将基本数据类型转换为对象
例子:
var num = new Number(2);
var str = new String("hello");
var bool = new Boolean(true);
注:
但是在实际应用中千万不要这么干
- 当我们去操作一个基本数据类型的属性和方法时,解析器会临时将其转换为对应的包装类,然后再去操作属性和方法,操作完成以后再将这个临时对象进行销毁。
四、字符串的相关的方法
length
获取字符串的长度
charAt()
根据索引获取指定的字符
charCodeAt()
根据索引获取指定的字符编码
String.fromCharCode()
根据字符编码获取字符
indexOf()
lastIndexOf()
从一个字符串中检索指定内容
- 需要一个字符串作为参数,这个字符串就是要检索的内容,如果找到该内容,则会返回其第一次出现的索引,如果没有找到则返回-1。
- 可以指定一个第二个参数,来表示开始查找的位置
- indexOf()是从前向后找;lastIndexOf()是从后向前找
slice()
- 可以从一个字符串中截取指定的内容,并将截取到内容返回,
不会影响原变量
- 参数:
第一个:截取开始的位置(包括开始)
第二个:截取结束的位置(不包括结束)
<script type="text/javascript">
str = "abcdeijk";
result = str.slice(1, 3); //bc
result1 = str.slice(1, -2); //bcdei
</script>
注:
可以省略第二个参数,如果省略则一直截取到最后;可以传负数,如果是负数则从后往前数
substr()
和slice()基本一致,不同的是它第二个参数不是索引,而是截取的数量
<script type="text/javascript">
str = "abcdefg";
result = str.substr(3, 2); //de
</script>
substring()
和slice()基本一致,不同的是它不能接受负值作为参数
,如果设置一个负值,则会自动修正为0,substring()中如果第二个参数小于第一个,自动调整位置。
toLowerCase()
将字符串转换为小写并返回
str = "ABCDEFG";
result = str.toLowerCase();
toUpperCase()
将字符串转换为大写并返回
split()
- 可以根据指定内容将一个字符串拆分为一个数组
- 参数:
需要一个字符串作为参数,将会根据字符串去拆分数组(示例1)
可以接收一个正则表达式,此时会根据正则表达式去拆分数组(示例2)
示例1:
<script type="text/javascript">
str = "abcdefg";
result = str.split("d"); //结果是 abc,efg
/*
* 如果传递一个空串作为参数,则会将每个字符都拆分为数组中的一个元素
*/
result = str.split(""); //a,b,c,d,e,f,g
</script>
示例2:
match()
- 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
默认情况下我们的match只会找到第一个
符合要求的内容,找到以后就停止检索,我们可以设置正则表达式为全局匹配模式
,这样就会匹配到所有的内容- 可以为一个正则表达式设置多个匹配模式,且顺序无所谓
- match()会将匹配到的内容
封装到一个数组中返回
,即使只查询到一个结果
replace()
- 可以将字符串中指定内容替换为新的内容
- 参数:
第一个:被替换的内容,可以是一个正则表达式
第二个:替换的新内容,默认只会替换第一个
,可以使用全局匹配
将所有符合规则的替换
str = "1a2s3d5f6g";
result = str.replace(/[a-z]/g, "");
console.log(result); //结果是12356
search()
- 可以搜索字符串中是否含有指定内容
- 如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到返回-1
- 它可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串
serach()只会查找第一个
,即使设置全局匹配也没用
str = "hello abc hello aec afc";
/*
* 搜索字符串中是否含有abc 或 aec 或 afc
*/
result = str.search(/a[bef]c/);
console.log(result);
五、正则表达式
正则用来定义一些字符串的规则
,程序可以根据这些规则来判断一个字符串是否符合规则,也可以将一个字符串中符合规则的内容提取出来。
创建正则表达式
Way1:
使用构造函数创建
var reg = new RegExp("正则表达式","匹配模式");
示例:
<script type="text/javascript">
var reg = new RegExp("a","i");
</script>
Way2:
使用字面量的方式创建
var reg = /正则表达式/匹配模式
示例:
<script type="text/javascript">
var reg = /a/i;
</script>
语法
匹配模式:
i: 忽略大小写
g: 全局匹配模式
注:
设置匹配模式时,可以都不设置,也可以设置1个,也可以全设置,设置时没有顺序要求
正则语法:
| 或
[] 或
[^ ] 除了
[a-z] 小写字母
[A-Z] 大写字母
[A-z] 任意字母
[0-9] 任意数字
test()方法
可以用来检查一个字符串是否符合正则表达式
如果符合返回true,否则返回false
示例1:
<script type="text/javascript">
//匹配除了a或者b的任意字符
var reg = /[^ab]/;
document.write(reg.test("a123")); //返回true
</script>
示例2:
<script type="text/javascript">
//检查一个字符串中是否含有 abc 或 adc 或 aec
reg = /a[bde]c/;
document.write(reg.test("afc")); //返回false
</script>
元字符
在正则表达式中使用\
作为转义字符
\. 来表示.
\\ 表示\
注意:
使用构造函数时,由于它的参数是一个字符串,而\是字符串中转义字符,
如果要使用\则需要使用\\
来代替
var reg = /\./; //等价于reg = new RegExp("\\.");
reg = /\\/; //等价于reg = new RegExp("\\\\");
练习1:
创建一个正则表达式,用来检查一个字符串是否是一个合法手机号
手机号的规则:
1 3 567890123 (11位)
- 以1开头
- 第二位3-9任意数字
- 三位以后任意数字9个
<script type="text/javascript">
var phoneStr = "13067890123";
var phoneReg = /^1[3-9][0-9]{9}$/;
console.log(phoneReg.test(phoneStr));
</script>
注:
如果在正则表达式中同时使用^ $则要求字符串必须完全符合正则表达式
练习2:
创建一个正则表达式检查一个字符串中是否含有单词child
<script type="text/javascript">
var reg = /\bchild\b/;
console.log(reg.test("hello child "));
</script>
练习3:
接收一个用户的输入,去除掉字符串前后的空格,不要去除字符串中间的空格。
<script type="text/javascript">
//var str = prompt("请输入你的用户名:");
var str = " he llo ";
//去除掉字符串中前后的空格
//去除空格就是使用""来替换空格
console.log(str);
//str = str.replace(/\s/g, ""); 此方法将he llo之间的空格也去掉了,不符合我们的需求
//去除开头的空格
//str = str.replace(/^\s*/, "");
//去除结尾的空格
//str = str.replace(/\s*$/, "");
// /^\s*|\s*$/g 匹配开头和结尾的空格
str = str.replace(/^\s*|\s*$/g, "");
console.log(str);
</script>
练习4:
电子邮件
<script type="text/javascript">
/*
* 电子邮件
* hello .nihao @ abc .com.cn
*
* 任意字母数字下划线 .任意字母数字下划线 @ 任意字母数字 .任意字母(2-5位) .任意字母(2-5位)
*
* \w{3,} (\.\w+)* @ [A-z0-9]+ (\.[A-z]{2,5}){1,2}
*/
var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "abc.hello@163.com";
console.log(emailReg.test(email));
</script>