内置对象
内置对象是ES标准中已经定义好的,由浏览器厂商已经实现的标准对象!内置对象中封装了专门的数据和操作数据常用的API。
Javascript中内置对象包括:String、Boolean、NUmber、Math、Array、Date、Error、Function、Object、Global
包装类型:String、Boolean、Number
String
charAt():获取指定位置的字符
charCodeAt():获取指定位置字符的unicode编号
*************************************
input=prompt("输入信息:");
var result = [];
for(var i=0;i<input.length;i++){
result.push(input.charCodeAt(i));
}
document.write(result.join(""));
//以上方法的缺点在于,每次字符串进行+=时会创建无数多的没用的字符串
//代码优化后
input=prompt("输入信息:");
var result = "";
for(var i=0;i<input.length;i++){
var num = input.chartCodeAt(i);
if(num<1000){
var arr=[0,0,0,0,0];
var code=num+"";
var start=5-num.length;
for(var n=0;n<code.length;n++){
arr[start]=code[n];
start++;
}
num=arr.join("");
}
result+=input.charCodeAt(i)
}
document.write(result);
//频繁对字符串+=,要用数组代替!
//step1:每个字符串放入数组
//step2:join(“”)拼接数组元素
字符串三大操作:1.查找关键字2.替换关键字3获取子字符串
查找关键字:var index=str.indexOf("关键字");返回关键字所在位置!*如果没找到,返回-1!*
indexOf:懒:只找第一个关键字位置!蠢:默认只能从位置0开始!
利用indexOf反复循环查找关键字的语句:
var str="女神说要来,我草草的收拾了房间。结果她又说不来了。我说:我草";
var index = -1;
while((index = str.indexOf("我草",index+1))!=-1){//index+1表示从上次找到位置之后,开始
console.log(“位置” +index+“发现关键字”);
}
从最后一个字符,向前找:var index= str.lastIndexOf("关键字",form);//from:开始查找的位置!从from开始向前查找
2. 截取子字符串:
(1)str.slice(start);
(2)str.substring(start,end+1)
substring和slice用法相同,唯一的区别是substring不支持负值作为参数
(3)str.substr(start,count)
以上三种发放省略第二个参数,默认都是取到结尾!
模式匹配:什么是模式匹配:可以设置查找或替换的规则!
何时使用模式匹配:要查找的关键字可能发生有规律的变化。
如何使用模式匹配:1.先定义模式:/关键字/模式
比如:var reg = /no/i;no是要查找的关键字原文,不加“”i表示忽略大小写!
str = str + str.replace(reg,"新值");//默认的replace仅替换第一个关键字!要想全局替换,要在模式中定义“g”
获得所有关键字的内容:var kwords=str.match(reg);只能取得关键字的内容,无法确定每个关键字的位置!
*如果未找到,返回null!以后只要有可能返回null!都要先判断!=null,再处理*
var index=str.search(reg);和indexOf完全相同!
indexOf不支持模式查找!search其实是indexOf的模式查找版
****正则表达式*****
何时使用正则?验证字符串格式,查找关键字,替换关键字
正则表达式:
选择符号:[所有备选字符]:[去草],必须多选一使用,一个[],只能代表一位字符的规则!
[^XXXX]:表示除了XXXXX都行!注意^必须放在[]中的第一个位置,否则,变为普通字符匹配
-符号:字符的范围:备选字符的范围!比如:[0-9][a-z][A-Z][a-zA-Z]
汉子:[\u4e00-\u9fa5]
预定义字符集:使用简化的字符,定义常用字符集
比如:[0-9] -->\d [a-zA-Z0-9_]-->\w 空字符-->\s
如果规则正文中出现特殊符号,用\转为原文:比如'.'代表任意字符,所以如果想使用.应该用\.
数量词:规定前边一个字符出现次数的量词。语法:{min,max}
{num}:固定长度
{min,}:至少min个,多了不限
特殊数量词:+ * ?
?:可有可无,最多只能出现一次
*:可有可无,不限制出现次数
+:至少出现一次!不限制出现次数
():分组:改变模式的匹配顺序 比如:验证身份证号:\d{15}(\d{2}[0-9xX])?
^:如果放在整个正则表达式的开头,表示以XXX开始
$:如果放在整个正则表达式的结尾,表示以XXX结束
?= :预判,前一个字符之后,必须紧跟XXX
?! :预判,前一个字符之后,必须不能跟XXX
RegExp对象:专门封装一条正则表达式,提供使用正则表达式的常用API
如何使用RegExp对象:1.创建 2.调用API
如何创建正则表达式对象:var regExp=/正则表达式/ig;
验证:var boolean=regExp.test('被检查的字符串');如果验证通过:返回true;否则返回false
验证要求完整匹配!查找要求部分匹配
test方法默认:只要找到就返回true!
正则表达式必须最前面加^,后加$
查找:exec:查找关键字的位置,又能找到关键字的内容
var str = “明明喜欢我,却不告诉我;别理我,我想静静;静静是谁?你TM先告诉我明明是谁?”
var regExp = /明明|静静/g;
var arr=[];
while((arr=regExp.exec(str)) != null){
//arr[0]关键字的内容
//arr.index:关键字的位置
document.write('在位置'+arr.index+'发现'+arr[0]);
}
查找总结:仅判断有没有,或者仅查找位置:indexOf()
仅判断有没有,或者仅查找位置并支持正则:search();
仅找到所有关键字的内容:match();
既找内容,又找位置:exec();
贪婪模式:.* .+,默认先匹配整个字符串,再缩小范围
懒惰模式:(.*?) (.+?),从第一个字符开始,向后扩展范围
超链接正则表达式:<a(.*?)href\s*=\s*["'](.*?)["'](.*?)>
从正则表达式匹配的内容中,取一部分:RegExp.$n
n:正则表达式中第n个分组,其实就是第n个圆括号 强调:分组从1开始,必须通过RegExp类型,直接调用$n,不能使用对象!
String对象与正则表达式
str=str.replace("/正则表达式/ig,'替换值'");
var arr=str.match(/正则表达式/ig); str.search(/正则表达式/); str.split(/正则表达式/);
trim功能:去除字符串开始和结尾的空格。中间空格不去掉
对输入字符串的处理,多数要先清楚开头和结尾的空格,再处理
IE8不支持trim()方法!
function trim(str){
//使用正则表达式替换开头和结尾的空字符
var regExp = /(^\s+) | (\s+$)/g;
str = str.replace(regExp,"");
return str;
}
去掉左空格:
function ltrim(str){
var reg = /^\s+/;
return str.replace(reg,"");
}
去掉右空格
function rtrim(str){
var reg = /\s+$/;
return str.replace(reg,"");
}
String总结:所有API都无法修改原字符串,都会返回新字符串,所有StringAPI都需要用变量保存结果!
查找关键字:var index=str.indexOf('关键字',[,from]);
var arr=str.match(/正则/g);
获得子字符串:var substr=str.slice(start,end+1);
str.substring(start,end+1);
str.substr(start,count);
替换:str = str.replace(/正则/g,'替换值');
字符编码转码:var code=str.charCodeAt(index);
var char=String.fromCharCode(code);
RegExp对象总结:
var reg=/正则/ig;
验证str中是否包含reg匹配的关键字:var boolean=reg.test(str);
强调:完整验证,都需要在正则前加^后加$
同时查询所有关键字的内容和位置
while((arr=reg.exec(str))!=null){
arr[0]-->找到的一个关键字
arr.index -->当前关键字的位置
}
RegExp.$n; 获得正则表达式中第n个分组(圆括号)匹配的子字符串
Math类
Math.round(num) --->四舍五入取整
Math.ceil(num)--->向上取整
Math.floor(num)--->向下取整
var arr=[2,3,4,56,8];
var max=Math.max.apply(Math,arr);
获取任意两个数之间的随机数:Math.floor(Math.random()*(max-min+1)+min)
随机生成四位验证码:
step1:将所有字母,数字装入一个数组
var codes=[];
//数字:48-57
for(var i=48;i<=57;codes.push(i),i++);
//大写字母:65-90
for(var i=65;i<=90;codes.push(i),i++);
//小写字母:97-122
for(var i=97;i<=122;codes.push(i),i++);
setp2:
var arr=[];
for(var i=0;i<4;i++){
//从0-61之间随机取,因为一共62个字符
var index=Math.floor(Math.random()*(61-0+1)+0);
var char=String.fromCharCode(codes[index]);
arr.push(char);
}
var code=arr.join("");
document.write("验证码:"+code);