包装类
-
基本数据类型
- String Number Boolean Null Undefined
-
引用数据类型
- Object
-
在JS中为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象
-
String() 可以将基本数据类型字符串转换为String对象
-
Number() 可以将基本数据类型的数字转换为Number对象
-
Boolean() 可以将基本数据类型的布尔值转换为Boolean对象
-
但是注意: 我们在实际开发中不会使用基本数据类型的对象
如果使用基本数据类型的对象,在做一些比较时会带来一些不可预料的结果
比如
var b=new Boolean(false);
if(b){
alert("因为b是对象,而对象要转化布尔值,无论对象是什么转化为布尔值都为true,所以这个警告框还会出来");
}
-
**方法和属性只能添加给对象,不能添加给基本数据类型 **
当我们对一些基本数据类型的值去调用属性和方法时,
浏览器会临时使用包装类将其转换为对象,然后在调用对象的属性和方法,调用完后,再将其转换为基本数据类型
var s=123;
s=s.toString();
s.hello="你好";
在对象1中添加hello属性 添加后就又转换为基本数据类型console.log(s.hello);
这里是s又转换为对象,这是对象2,对象2里没有hello属性 返回undefined
-
字符串的方法
-
字符串在底层是以字符数组的形式保存的
var str="Hello World";
[“H”,“e”,“l”…]
-
charAt() 可以返回字符串中指定位置的字符 根据索引获取指定的字符
var result=str.charAt(6);
-
charCodeAt() 获取指定位置字符的字符编码(Unicode编码)
-
String.formCharCode() 可以根据字符编码去获取字符 注意:要通过String来调用
result= String.formCharCode(20013);
得到 “中”
-
concat() 可以用来连接两个或多个字符串 作用和+一样
-
indexOf() 该方法可以检索一个字符串是否含有指定内容,并返回索引
如果字符串中含有该内则会返回其第一次出现的索引
如果没有找到指定的内容,则返回-1
可以指定一个第二个参数,指定开始查找的位置
var str= "hello world";
result=str.indexOf("h",1)
返回0 因为从1下标开始就没有h字符了 -
lastIndexOf()
-
该方法的用法和indexOf()一样
不同的是indexOf是从前往后找
而lastIndexOf是从后往前找
也可以指定开始查找的位置
-
-
**slice() 可以从字符串中截取指定的内容 **
不会影响原字符串,而是将截取到的内容返回
参数:
——第一个,开始位置的索引(包括开始位置)
——第二个,结束位置的索引(不包括结束位置) 如果省略第二个参数,则会截取到后面所有的
也可以传入一个负数作为参数,负数的话将会从后边计算
-
substring() 可以用来截取一个字符串,与slice()类似
参数:
——第一个,开始位置的索引(包括开始位置)
——第二个,结束位置的索引(不包括结束位置)
不同的是这个方法不能接受负值作为参数,如果传递一个负数,则默认使用0
而且它还会自动调整参数的位置,如果第二个参数小于第一个,则自动交换
var result=str.substring(0,1);
-
substr() 用来截取字符串
参数:
——1.截取开始位置的索引(不包括起始的索引位置)
——2.截取的长度
str="abcdefg";
var result=str.substr(3,2);
返回de -
split() 将一个字符串拆分为一个数组
参数: 需要一个字符串作为参数,将会根据该字符串去拆分数组
var str="abc,bcd,efg,dfe";
var result=str.split("d");
分成两个数组console.log(result.length);
返回2 如果传递一个空串作为参数,则会将每个字符都拆分为数组的一个元素
var str="abcdefg";
var result=str.split("");
console.log(result);
输出"a,b,c,d,e,f,g" -
toUpperCase() 将一个字符串转换为大写并返回
var str="abcd";
var result=str.toUpperCase();
-
toLowerCase() 将一个字符串转换为小写并返回
正则表达式
-
正则表达式的简介
-
邮件的规则
- 1.前面可以是xxxx
- 2.后面跟一个@
- 3.后面可以是xxxx
- 4 .com获取其他东西
-
正则表达式用于定义一些字符串的规则
计算机可以根据正则表达式来检查一个字符串是否符合规则
然后将字符串中符合规则的内容提取出来
-
创建正则表达式的对象
-
使用构造函数创建正则表达式
-
语法 : var 变量 =new RegExp(“正则表达式”,“匹配模式”);
在构造函数中可以传入一个匹配模式作为第二个参数
参数可以是
——i 忽略大小写
——g 全局匹配模式
使用typeof检查正则表达式,会返回Object
var reg=new RegExp("a","i");
这个正则表达式可以用来检查一个字符串中是否含有avar str="a";
-
-
使用字面量来创建正则表达式
-
语法 : var 变量 = /正则表达式/匹配模式
var reg= /a/i;
使用字面量的方式创建更加简单
使用构造函数创建更加灵活
-
-
-
正则表达式的方法
-
test() **使用这个方法可以检查一个字符串是否符合正则表达式的规则 **
若符合则返回true 否则返回false
var result=reg.test(str);
console.log(result);
//返回true
-
-
正则语法
-
创建一个正则表达式来检查一个字符串中是否含有 字母
-
|
可以表示 或
var reg=new RegExp();
reg=/a|b|c|d|f|g/;
-
[]
里的内容也是 或 的关系
[ab] == a|b
[a-z] 任意小写字母
[A-Z]
任意大写字母
[A-z]
任意字母
[0-9]
任意数字
reg=/[A-Z]/i;
reg在A-Z之间且忽略大小写
-
-
检查一个字符串是否含有abc 或adc 或 aec
reg =/a[bde]c/
-
检查一个字符串里是否含有除了ab以外的字符串
[^ ]
除了reg =/[^ab]/;
console.log(teg.test("abc"));
返回true -
检查一个字符串里是否含有数字
reg=/[0-9]/;
console.log(reg.test("123"));
trueerg=/[^0-9]/;
找除了数字的console.log(erg.test("123"));
false
-
字符串与正则表达式相关的方法
-
split() 可以将一个字符串拆分为一个数组
在方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串
比如 根据任意字母去拆分字符串
var str="1a2c3d4e5r6f";
var result=str.split(/[A-z]/);
这个方法即使不指定全局匹配,也会全都拆分
console.log(result);
输出"1,2,3,4,5,6" -
search() 可以搜索字符串中是否含有指定内容
如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到则返回-1
它可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串
var str="hello abc hello aec afc";
var result1=str.search("abc");
console.log(result1);
返回6
var result2=str.search("ase");
不存在则返回-1
console.log(result2)
返回-1搜索字符串中是否含有abc 或 aec 或 afc
var result3=str.search(/a[bef]c/);
result3的值是6 因为abc的a下标为6search()只会查找第一个指定内容的下标,即使设置全局匹配也没有用
var result4=str.search(/a[bef]c/g);
result4的值还是6 因为search()方法设置全局模式也没有用 -
match() 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
默认情况下match()方法只会找到第一个符合要求的内容,找到以后就停止检索
我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容
也可以为一个正则表达式设置两个全局匹配模式,且顺序无所谓
var str="1a2b3c4d5e6f7g8A9S";
var result1=str.match(/[a-z]/g);
全局匹配
console.log(result1);
输出"a,b,c,d,e,f,g"
var result2=str.match(/[a-z]/gi);
既全局匹配又忽略大小写 或者这样写/[a-z]/ig
效果是一样的
console.log(result2);
输出"a,b,c,d,e,f,g,A,S";match()方法会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果
var str="1a2b3c4d5e6f7g8A9S";
var result3=str.match(/[a-z]/ig);
console.log(Array.isArray(result3));
输出true
console.log(result3[0]);
输出1 -
replace() 可以将字符串中指定内容替换为新的内容
参数 :
1.被替换的内容
2.新的内容
var str="abadafAg";
var result1=str.replace("a","@-@");
console.log(result1);
输出@-@badafg 默认下只会替换一个,这时候就可以使用正则表达式来替换全部
var result2=str.replace(/a/g,"@-@");
使用全局模式console.log(result2);
输出@-@b@-@d@-@fAgvar result3=str.replace(/a/ig,"@-@");
使用全局模式而且忽略大小写console.log(result3);
输出@-@b@-@d@-@f@-@gvar result4=str.replace(/[a-z]/gi,"@-@");
使用全局模式而且忽略大小写 并且替换所有字母 使用空串来替换字母,就可以把一个含有数字和字母的字符串变成一个只含有数字的字符串
var str="1a2s3s5A";
var result=str.replace(/[a-z]/gi,"");
console.log(result);
输出1234
正则表达式语法
-
量词 通过量词可以设置一个内容出现的次数
{n} 正好出现n次
-
如 创建一个正则表达式检查一个字符串中是否含有aaa
var reg=/a{3}/;
量词只对它前边的一个内容起作用
-
x{n} 出现n次x,连续的 如 检查abbb
var reg=/ab{3}/;
console.log(reg.test("ababab"));
falseconsole.log(reg.test("abbb"));
true-
检查ababab 把ab用()括起来
var reg=/(ab){3}/;
console.log(reg.test("ababab"));
true
-
-
x{n} x正好出现n次 如 检查abbbc
var reg=/a(b){3}c/;
console.log("abbbc");
true-
如 检查是否含有3个b
var reg=/b{3}/;
console.log("bbbb");
只要含有三个连续的b就返回true
-
-
x{m,n}x至少出现m~n次 如 检查是否含有1~3个b
var reg=/ab{1,3}c/;
console.log(reg.test("abbc"));
true -
n{x,}至少包含x个n 如 检查是否含有5个b
var reg=/ab{5,}c/;
console.log(reg.test("abbbbbbc"));
true -
+ 至少一个,相当于{1,}
var reg=/ab+c/;
console.log(reg.test("abbc"));
true -
*
0个或多个var reg=/ab*c/;
console.log(reg.test("abbc"));
true -
? 0个或1个 相当于{0,1}
var reg=/ab?c/;
console.log(reg.test("ac"));
true -
检查一个字符串是否以a开头或者结尾
-
^ 表示开头
reg=/^a/;
匹配开头的a -
$ 表达结尾
reg=/a$/;
匹配结尾为a -
同时含有^和$ 如果在正则表达式中同时使用这两个符号,那么要求字符串必须完全符合正则表达式
reg=/^a$/;
要求正则表达式必须是aconsole.log(reg.test(aaa));
falsereg2=/^a|a$/;
以a开头或以a结尾console.log(reg.test(aaa));
true
-
练习
-
<script>
/*
* 创建一个正则表达式,用来检查一个字符串是否是一个合法手机号
* 手机号的规则
* 1.以1开头 ^1
* 2.第二位3~9任意数字 [3-9] 一个就不用写量词
* 3.三位以后任意数字9个 [0-9]{9}$
*/
var phonestr="17337802454";
var phoneReg=/^1[3-9][0-9]{9}$/;
console.log(phoneReg.test(phonestr));
</script>
-
使用\作为转义字符
-
\.
表示.
一个单独的.
表示任意字符
var reg=/\./;
console.log(reg.test("b."));
true -
\\
表示\
var reg=/\\/;
console.log(reg.test("b.\\"));
trueconsole.log("b.\\");
输出 “b.\
” -
\w 表示任意字母、数字和下跨线(_) [A-z 0-9 _ ]
reg= /\w/;
console.log(reg.test("e"));
-
\W 除了字母、数字和下划线(_) [ ^ A-z 0-9 _]
reg=/\W/;
console.log(reg.test("@#$%"));
true -
\d 任意的数字 [0-9]
reg=/\d/;
console.log(reg.test("222"));
trueconsole.log(reg.test("asd"));
false -
\D 除了数字 [ ^0-9 ]
-
\s 空格
reg=/\s/;
console.log(reg.test("12 3"));
true -
\S 除了空格
reg=/\S/;
console.log(reg.test(" "));
false -
\b 单词边界 单词边界就是单词左右有空格,这些空格来标记这是一个单词
创建一个正则表达式检查一个字符串中是否含有单词child
reg=/\bchild\b/;
console.log(reg.test("children child children"));
true -
\B 除了单词边界
-
-
去除字符串中的前后的空格,不去除中间的空格 去除空格就是使用""(空串)来替换空格
var str=" hello ";
str =str.replace(/\s/g,"");
这个会把字符串中所有的空格都去除,这个方法有局限console.log(str);
输出"hello"------去除开头的空格 /^\s/*
var str=" he llo ";
str=str.replace(/^\s*/,"");
表示替换开头的 0~n个空格console.log(str);
输出"he llo"------去除结尾的空格 /\s$/*
str=str.replace(/\s*$/,"");
表示替换结尾的 0~n个空格-----去除开头和结尾的空格 / ^\s | \s$ / g(或者 / ^\s+ | \s+$ / g +加号表示1~n 表示0~n) 匹配开头和结尾的空格*
str=str.replace(/^\s*|\s*$/g,"");
邮件的正则
-
电子邮件的格式 welcome .hello @ 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));