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
- JavaScript基础知识(7)
- JavaScript(一、基础知识)
- Javascript基础知识(1)
- Javascript基础知识(2)
- javascript(js)基础知识
- Javascript-基础知识(1)
- Javascript-基础知识(3)
- Javascript-基础知识(4)
- Javascript-基础知识(5)
- Javascript-基础知识(6)
- javascript基础知识(数组)
- JavaScript基础知识(一)
- JavaScript基础知识(2)
- JavaScript基础知识(3)
- javascript基础知识(一)
- JavaScript基础知识(一)
- JavaScript基础知识(2)
- javaScript基础知识(3 )
- JZOJ 3.10 1540——岛屿
- vue2.0基于vue-cli,element-ui饿了么vue前端开源项目制作vue的树形table,treeTable
- 使用Redis存储Nginx+Tomcat负载均衡集群的Session
- 【COCI2013】linije
- bzoj3940 Censoring
- JavaScript基础知识(7)
- 单例模式
- Gradle 插件入门
- 《数据结构与算法分析-C语言描述》详解-Sec2(一)
- 理工学生就业那些事
- 最大网络流
- 原型模式
- nodejs内置模块
- python爬虫—hello world!