JavaScript基础知识(7)

来源:互联网 发布:5条红酒网络广告语 编辑:程序博客网 时间:2024/05/16 16:22
 内置对象既能保存数据又能操作数据

 内置对象中封装了专门的数据和操作数据常用的API。
 JavaScript内置十个对象列表:String,Boolean,Number,Date,Math,Error,Function,Object,Global

 使用一个没有声明的对象,会出错,不是undefined

 包装类型:专门封装原始类型的数据,并提供对数据常用操作的内置类型。为什么要用包装类型:让原始类型的数据也可以像引用类型一样,拥有方法和属性

 var num=5.678;  //原始类型
 //num=bew Number(num);  包装类型
 console.log(num.toFixed(2));
 //num=null;   释放包装类型对象

 何时使用包装类型:只要用原始类型的数据调用方法或访问属性时,js引擎都会自动创建对应的包装类型对象。方法调用完,包装类型对象自动释放。


 String对象用于处理文本字符串。
 创建字符串:
 var str="...";   //原始类型
 var str=String("...");  //原始类型,并不是定义一个字符串,而是将其他类型转换成字符串,是类型转换,只有通过new才能创建包装类型对象(数组除外)
 var strObj=new String("...");  //包装类型对象

 var stuName='Smith';   //直接量,程序中直接使用的值
 var priceString=String(3355);  //类型转换


 转义字符:1.代替字符串中的非打印字符
           2.如果字符串内容中包含和语法冲突的特殊字符,可用\转为普通字符


 字符串内容一旦创建,不可改变!如果修改,都要创建新新字符串,保存新结果,替换旧字符串
 规律:所有字符串API都需要变量接收返回值,否则无法拿到新值。

 字符串的字符个数:length属性
 字符串类型底层其实全都是用字符数组实现的。!!
 比如:str[i]


 大小写转换:大小写字母一视同仁时,要先转化,再处理。
 比如:重名验证,重复邮箱,验证码

 例:
 var code="5AsD";
 var input="";
 while((input=prompt("输入验证码"+code)).toLowerCase()!=code.toLowerCase()){
 alert("验证码错误");
 }document.write("登录成功");


 获取指定位置的字符:var char=str.charAt(index); //在index位置的char

 例:提取身份证倒数第二位判断性别
 var pid="11012198006282151";
 var char=paid.charAt(pid.length-2);
 console.log(char%2==0?"女":"男");


 获取指定位置字符的Unicode编号:var num=str.charCodeAt(index);

 加密和解密
 input=prompt("输入消息:");
 var result="";    //初始化为字符串
 for(var i=0;i<input.length;i++){
 input.charCodeAt(i);
 result+=input.charCodeAt(i);   //初始化后输入数字也会以字符串形式相加
 }
 document.write(result);

 上述方法用下面来实现更好:
 input=prompt("输入消息:");
 var result=[];
 for(var i=0;i<input.length;i++){
 result.push(input.charCodeAt(i));
 }
 document.write(result.join(""));


 优化定律:
 频繁对字符串+=,要用数组代替:
 step1.每个子字符串放入数组
 step2.join("")拼接数组元素


 只要不足5位前面都要补齐0的案例:
 input=prompt("输入消息:");
 var result=[];
 for(var i=0;i<input.length;i++){
 var num=input.charCodeAt(i);
 if(num<10000){
  var arr=[0,0,0,0,0];     
  var code=num+"";        //转为字符串的一种常用方法
  var start=5-code.length;  //start是确定从哪个地方将编码插进去
  for(var n=0;n<code.length;n++,start++){
  arr[start]=code[n];    //修改arr[]里面元素值
 }
 num=arr.join("");
 }result.push(num);
 }
 document.write(input+"<br/>");
 document.write(result.join(""));


 从性能上来说,将任何类型变成字符串+""这种方式比toString方法要快


 字符串三大操作:任何语言中都有的
 1.查找关键字
 2.替换关键字
 3.获取子字符串

 查找关键字:var index=str.indexOf("关键字");
 返回的是关键字所在位置。如果没找到,返回-1
 indexOf:懒(一段话中可能包含多个关键字,但是永远只找第一个关键字的位置),蠢(默认只能从位置0开始)

 稍微聪明点的方法:
 var index=str.indexOf("关键字",from);
 from:表示开始查找的位置,从from开始向后查找

 例:
 var str="女神说要来,我草草的收拾了房间。结果她又说不来了。我说:我草";
 var index=str.indexOf("我草");
 console.log("位置"+index+"发现关键字");
 index=str.indexOf("我草",index+1);
 console.log("位置"+index+"又发现关键字");


 可用下面方法实现:
 var str="女神说要来,我草草的收拾了房间。结果她又说不来了。我说:我草";
 var index=-1;
 while((index=str.indexOf("我草",index+1))!=-1){
 console.log("位置"+index+"发现关键字");
 }
 //index+1表示从上次找到的位置之后开始

 从最后一个字符向前找:
 var index=str.lastIndexOf("关键字",from);
 from:从开始位置往前找
 今后只要关键字离结尾近,就用lastIndexOf

 var index=str.lastIndexOf("关键字",from);和var index=str.indexOf("关键字",from);虽然查找方向不同,但是二者返回的index完全相同,因为字符在数组中的下标是固定的

 从后向前查找:
 var str="女神说要来,我草草的收拾了房间。结果她又说不来了。我说:我草";
 var index=str.length;
 while((index=str.lastIndexOf("我草",index-1))!=-1){
 console.log("位置"+index+"发现关键字");
 }



 截取子字符串:var subStr=str.slice(start,end+1)
 返回值是子字符串
 str.substring(start,end+1)用法同slice,唯一的差别是这个方法不支持负值作为参数,但是这个方法在其他语言里兼容,slice在其他语言里是没有的。
 str.substr(start,count)这个方法可可以获取子字符串,但是第二个参数是字符个数。
 以上三种获取子字符串的方法,省略第二个参数,都是默认取到结尾

 例:
 var pid="110102198006282151";
 var birth=pid.slice(6,13+1);
 console.log(birth);
 还可以用负数从后往前取:
 var pid="110102198006282151";
 var birth=pid.slice(-4-8,-4);
 console.log(birth);


 回顾:
 var num=str.length:字符个数
 str=str.toLowerCase()/toUpperCase()
 var char=str.charAt(index):指定位置的字符
 var code=str.charCodeAt(index):指定位置的字符的Unicode编码

 查找关键字:
 var index=str.indexOf("关键字"[,from])
 var index=str.lastIndexOf("关键字"[,from])

 获取子字符串:var subStr=str.slice(start,end+1);
                      str.substring(start,end+1);
                      str.substr(start,count);


 只要不足5位前面都要补齐0的案例,可用下述方法实现:
 input=prompt("输入消息:");
 var result=[];
 for(var i=0;i<input.length;i++){
 var num=input.charCodeAt(i);
 if(num<10000){
  num=num+10000+"";     
  num="0"+num.slice(1);
 }result.push(num);
 }
 document.write(input+"<br/>");
 document.write(result.join(""));

 上述案例解码如下:
 var input=prompt("粘贴编码");
 var arr=[];
 for(var i=0;i<input.length;i+=5){
  var code=input.substring(i,i+5);
  arr.push(String.fromCharCode(code));
  var result=arr.join("");
 }
 document.write(input+"<br/>");
 document.write(result);

277842493521531

 按规律分割字符串:
 var subs=str.split("分隔符",count)  =>返回切割后的数组
 count值可有可不有,不加的时候后面的都是
 分隔符在结果中时不包含的
 开头和结尾包含分隔符,会返回空元素

 将每个单词首字母大写:
 var str="no zuo no die";
 var words=str.split(" ");
 for(var i=0;i<words.length;i++){
 words[i]=words[i][0].toUpperCase()+words[i].substring(1);
 }
 str=words.join(" ");
 //取每个单词元素的首字母转大写,拼第二个字母之后的所有字符

 例:
 var str="选购AppleCare+,延保2年";
 var engCount=0;
 var numCount=0;
 var chsCount=0;
 var other=0;
 for(var i=0;i<str.length;i++){
 var num=str.charCodeAt(i);
 if(num>=19968&&num<40869){
 chsCount++;
 }else if((num>=65&&num<=90)||(num>=97&&num<=122)){
 engCount++;
 }else if(num>=48&&num<=57){
 numCount++;
 }else{
 other++;
 }
 }
 document.write("<br/>"+str);
 document.write("<br/>"+"汉字"+chsCount+"个<br/>"+"数字"+numCount+"个<br/>"+"字母"+engCount+"个<br/>"+"其他字符"+other+"个<br/>");


 判断字符的种类:用Unicode范围
 Unicode          字符种类
 48-57:         0-9数字字符
 65-90:        A-Z大写字母
 97-122:       a-z小写字母
 19968-40869:   汉字
 此外的:        其他字符


 什么是模式匹配:可以设置查找或替换的规则
 何时使用模式匹配:要查找的关键字可能发生有规律的变动时

 如何使用模式匹配:
 1.先定义模式:/关键字/模式    ==>斜线里面不要加双引号
   如:var str="No zuo no die";
       var reg=/no/i;    //忽略大小写,其中no是要查找的关键字原文,不加双引号,i表示忽略大小写

 String类型中,提供了专门支持模式匹配的API

 按模式替换关键字:str=str.replace(reg,"新值");  ==>不能修改原字符串的
 默认的replace仅替换第一个关键字,要想全局替换,要在模式中定义"g"
 replace方法也可以使用字符串直接替换,但是一般优先选择带模式转换的替换

 例:
 var str="No zuo no die";
 var reg=/no/i;   /i忽略大小写,g全局查找/替换
 str=str.replace(reg,"**");
 document.write(str);    //只能替换第一个,后面的不管了,但是如果将var reg=/no/ig;  这样的话就能全局替换了


 match方法:获得所有关键字的内容:
 var kwords=str.match(reg);
 只能取得关键字的内容,无法确定每个关键字的位置。如果未找到关键字,返回null。今后只要有可能返回null,在用之前就要先判断是否为null。
 kwords.length:返回的是找到的关键字的个数


 例:
 var str="No zuo no die";
 var reg=/no/ig;   /i忽略大小写,g全局查找/替换
 var kwords=str.match(reg);
 document.write(kwords+"<br/>");
 str=str.replace(reg,"**");
 document.write(str);    //只能替换第一个,后面的不管了,但是如果将var reg=/no/ig;  这样的话就能全局替换了
 document.write("共替换了"+kwords.length+"处");

 上述案例中,如果关键字没找到,那么kwords.length会出错,因为kwords返回值是null

 search方法:
 var index=str.search(reg);用法和indexOf()方法完全相同,但是indexOf不支持模式查找,但是search其实是indexOf的模式查找版,且每次都是从最初位置开始匹配,只有一个参数


 正则表达式:只要在网页中处理格式都要使用正则表达式!
 什么是正则表达式:一个字符串中,字符出现的规律。
 何时使用正则表达式:验证字符串格式,查找关键字,替换关键字
 比如:银行卡查询密码:6位数字
       用户名:字母,数字,下划线的组合

 正则表达式是统一的,和哪种语言无关

 正则表达式中的选择符号:[所有备选字符],这种中括号选择符只能多选一,不能不选,如[去草]
 一个[],只能代表1位字符,无论写多少字符,都只能匹配一个,且必须匹配一个字符。
 可以使用多个[][]来匹配多个字符
 如果在[]里面的第一个位置使用^,[^],表示除了xxx都行
 [^xxx]:^如果放在备选字符中间,就变成普通字符匹配了,必须放在[]中的第一个位置

 -符号:表示字符的范围:备选字符是连续的范围时使用
 如:[1-9][0-9]匹配一个两位数
     [A-D]匹配A~D中的一个,不是进行减法
     [a-zA-z]匹配a~z和A~Z中的一个,横线-可以局部使用
 匹配汉字范围:[\u4e00-\u9fa5]

 如:我[\u4e00-\u9fa5]:匹配“我”后面加任意一个汉字
     [\u4e00-\u9fa5][\u4e00-\u9fa5]:匹配两个汉字

 正则表达式的专用字符:
 \d  匹配一个数字

 预定义字符集:使用简化的符号,来定义常用字符集
 比如:[0-9] -->\d
 [a-zA-z_] -->\w  打印字符,匹配一位字母或者下划线,数字
 空字符-->\s   匹配一切看不到的字符,空字符,空格,制表符等

 86\s1[3578]
 \w\w\w\w\w\w@\w\w\w\w\w\.com   匹配邮箱,后面的点要加\转义
 凡是在正则表达式中的原文不会有颜色的,如这里的@和com

 如果规则正文中出现特殊符号,用\转为原文
 “.”代表一个任意字符,如果不加转义\的话,那个位置随便什么字符都可以

 +86\s1[3578]这里的“+”要转义才行 -->\+86\s1[3578]

 数量词:规定前边一个字符出现次数的量词
 语法:{min,max}
 例:\d{6,8}规定
 {num}:固定长度
 {min,}至少min个,多了不限

 手机号:\+86\s1[3578]\d{9}
 用户名8位以上字母或数字的组合:\w{8,}

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 1岁幼儿牙齿腐蚀怎么办 我的大牙变黑了怎么办 牙齿里面黑了疼怎么办 最里面的牙黑了怎么办 牙龈的肉裂开了怎么办 有蛀牙怎么办可以变好么 拔智齿没拔干净怎么办 蛀牙只剩牙根了怎么办 牙掉的就剩牙根怎么办 蛀牙牙冠都掉了怎么办 拔智齿断了牙根怎么办 牙肉肿痛有脓包怎么办 种植牙到寿命后怎么办 牙齿松动快掉了怎么办 一颗牙齿松动了怎么办 种植牙牙冠掉了怎么办 牙就剩下牙根了怎么办 后面的大牙掉了怎么办 两边大牙都没了怎么办 拔牙把牙根断了怎么办 拔乳牙牙根断了怎么办 拔牙时牙根断了怎么办 孕晚期牙根掉了怎么办 根管治疗后牙裂怎么办 智齿拔断了牙根怎么办 大牙断了牙根还在怎么办 孕妇牙疼的要命怎么办 牙烂了个大窟窿怎么办 牙齿又痒又痛怎么办 大牙就剩牙根了怎么办 蛀牙只剩牙根痛怎么办 带牙冠的牙疼了怎么办 牙龈肉与牙分离怎么办 后槽牙松动还疼怎么办 嘴唇又干又痒怎么办 嘴唇边突然肿了怎么办 大牙齿蛀牙很疼怎么办 蛀牙经常牙疼怎么办呢 小孩牙齿稀疏牙缝大怎么办 7岁牙齿缝隙大怎么办 小孩牙掉了不长怎么办