String
内置对象和包装类型
对象,是封装了数据和操作数据的API的集合,看不懂吧,看不懂就把他想成一个有属性有方法的值。
所有引用类型的数据称之为对象
不同的对象,具有不同的属性和方法函数
内置对象是ECMAScript标准中已经定义好的,浏览器已经实现的标准对象
JS中的内置对象:String Boolean Number Array Date RegExp Math Error Function Object Global
除此之外,还可以自定义对象。当然了,我不会。
包装类型:把原始类型的数据进行包装后,就使得原始类型的数据具备了某些属性和方法。所以包装类型就是专门封装原始类型的数据并且提供了操作对象API的类型,比如内置对象String就是原始数据类型string的包装类型,Number Boolean分别是number boolean的包装类型
例如:
//创建原始数据类型
var s1="abc";
var n1=123;
//创建包装类型,即创建了某个数据类型的对象
var s2=new String("abc");//创建了一个String类型的对象s2;
var n2=new Number(123);
有什么用呢?
比如一个string类型,如果是引用类型,就可以使用一些方法API,比如获取长度了,比如获取哪个位置的字符了等等。
But,当我们创建原始数据类型时,也可以调用这些方法,原因是由于使用原始数据类型的数据调用方法或访问属性时,js引擎都会自动创建对应的包装类型,并执行操作,操作完成后包装类型的对象自动释放,所以说,感觉包装一下没什么用啊。
String
字符串,是多个字符组成的只读字符序列
String,字符串对象,用于存储和操作字符串,提供了多种API
字符串是一个原始值,可以直接赋值给一个变量
也可以使用new关键字将字符串定义为一个字符串对象
字符串要使用单引号或双引号包含
String API:
toUpperCase():将字符串中的字母同一转为大写,返回转换后的字符串,不改变原字符串
toLowerCase():将字符串中的字母同一转为小写,返回转换后的字符串,不改变原字符串
charCodeAt(i):获得指定索引位置的字符的unicode编码,是个number类型的
String.fromCharCode(unicode):将unicode编码转回原文,静态的,固定写法String开头
<script>
//编码解码
function biancode(){
var numArr=[];
var str=prompt("请输入一段字符串:");
for(var i=0;i<str.length;i++){
numArr.push(str.charCodeAt(i));
}
return numArr;
}
var numArr=biancode();
console.log(numArr);
function jiecode(numArr){
var str="";
for(var i=0;i<numArr.length;i++){
str+=String.fromCharCode(numArr[i]);
}
return str;
}
var str=jiecode(numArr);
console.log(str);
</script>
slice(start,end):返回从start到end-1范围内的字符串
substring():同上,但不支持负数下标
sbustr(start,n):返回从start开始的n个字符组成的子字符串
indexOf():检索一个指定关键词在字符串中首次出现的位置,如果找到,返回关键词第一个字的下标位置,如果找不到,返回-1
lastIndexOf():用法同上,但是从后往前检索
划重点的API
search(): 查找,检索指定的子字符串或者检索与正则表达式相匹配的子字符串,返回子字符串首次出现的位置,没找到返回-1。与indexOf的区别:indexOf有两个参数,可以选择在哪个位置开始检索,然而search只有一个,也就是从头开始,只能检索到一个。这样看岂不是search很菜。but,search参数支持正则表达式,非常强的正则表达式。举个例子:str.search(/str/i):检索“str”,i表示不区分大小写。
match(): 匹配,检索指定的子字符串或者与正则表达式匹配的子字符串,返回查找到的子字符串,组成一个数组
split(): 分割,使用指定的分割符对字符串进行分割
replace(): 替换,将字符串中指定的子字符串或者与正则表达式相匹配的字符替换为新的值,返回替换后的字符串
综上所述,正则表达式很强大