为了方便操作基本数据类型 js还提供了三个特殊的引用类型
:String(字符串型),Number(数字型),Boolean(布朗型)
基本包装类型就是吧简单数据类型包装成复杂数据类型
从而有了属性和方法
原理是
先将简单的数据类型包装成复杂的数据类型
使用这个复杂数据类型进行一些操作
最后把复杂数据类型转回简单数据类型
以上都由js内部自动完成
字符串的不可变性指的是里面的值不可变 输入看上去内容改变了 但是其实是地址进行了改变
当重新给字符串变量赋值的时候,变量之前保存的字符串不会被修改,依然在内存中重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。
由于字符串的不可变,在大量拼接字符串的时候会有效率问题
字符串的不可变性带来的问题:
消耗内存,所以尽量不做字符串大量拼接
字符串通过基本包装类型可以调用部分方法来操作字符串,
返回指定字符的位置和数组的类似
我们可以通过上面的方法来统计一个字符在字符串中出现的位置和次数
indexOf()
如图所示
同时我们也可以跳过前几个字符开始找位置
如图所示
思路如下
首先创建一个字符串变量
寻找q出现的次数和位置
var a ='qwqeqeqrqrqrqrqewqvgq';
创建一个变量 使他等于0 用来统计出现的次数
var b =0;
利用indexOf()加数字可以从第你加的数字开始找
我们可以在创建一个变量等于第一个q出现的位置
var index = a.indexOf('q');
接着开始用循环来找位置和索引值
这边我们用while循环
while (index != -1) { //代表找到了的话 console.log('位置是'+index); // 打印出位置 b++ // 代表次数 index = a.indexOf('q',index+1); // 出现的话就从q 的后面一个开始找 } console.log(b); // 打印出现的次数
完整代码和结果如下
字符串通过基本包装类型也可以调用部分方法来操作字符串
方法如下
charAt()会返回指定位置的字符
如图所示
代码如下
var a = 'biu'; for(var i = 0 ; i<a.length;i++){ console.log(a.charAt(i)); }
获取指定位置处字符串的ASCII码
ASCII码如下
这是html5新增加的 获取指定位置的字符
不考虑兼容问题的话是最方便的
var a = 'biu'; alert(a[2])
1首先创建一个空对象用来存放
var a = 'qwwqqqqqqertt'; var o = {}
2遍历字符串
for(var i = 0; i <a.length; i++) { }
3 设立一个变量 等于字符串中的第i个字符
var c =a[i] //因为c等于a[i] 所以这里的c代表字符串中的每一个字符
4 设立条件
if(o[c]){ o[c]++ //o[c]代表对象的属性值 如果再次找到 就添加一个 即属性值加1 在这里相当于 数量加1 }else{ o[c] = 1 //代表第一次找到 给它赋值为1 }
目前完整代码如下
var a = "qwwqqqqqqertt"; var o = {}; for (var i = 0; i < a.length; i++) { var c = a[i]; // 相当于 if (o[c]) { o[c]++; } else { o[c] = 1; } }
输出对象
得到
统计了代码之后 我们在来寻找最多的字符及其数量
5 我们先设立一个变量 当作最大值
需要注意的是 我们在赋值的是时候 该最大值不能为正数 以防止数组或者对象全是1或者小数之类的
var max = -1
同时在设置一个变量来代表对象的属性名
var m ;
6 遍历对象
for(var key in o) { }
7 设立条件 如果遇到比我们设定代表最大的变量大 就把该属性值赋值给我们设定最大的对象
同时让我们的设定代表属性名的变量等于key(属性名);
if(o[key] > max) { max =o[key]; m =key }
输出结果如下
完整代码如下
var a = "qwwqqqqqqertt"; var o = {}; for (var i = 0; i < a.length; i++) { var c = a[i]; if (o[c]) { o[c]++; } else { o[c] = 1; } } console.log(o); var max = -1; var m ; for(var key in o) { if(o[key] > max) { max =o[key]; m =key } } console.log(max); console.log(m);
concat(str1,str2,str3..)
concat()方法用于连接两个或者多个字符串 等效与 + 号
但是+ 号更简单方便也常用
substr(start,length)
start代表起始位置
length代表要取的个数
需要区分的是 截取不是删除
slice(start,end)
从start位置开始 截取到end位置
end不取
也可以取负数
substring(start ,end )
substring() 和slice一样
从start位置开始 截取到end位置
end不取
但是不能取负数
replace(被替换的字符串, 要替换为的字符串)
但是需要注意的是 如果在一个字符串中拥有诸多相同字符需要替换
则需要while循环来进行
首先利用indexOf()来设置条件
while (str.indexOf("qwe") != -1) { //代表的是 直到找不到字符串中的qwe }
然后设置循环体
str = str.replace("qwe", "zxc");
完整代码如下
var str = "qwertyuioqwertyuioqwertyuio"; while (str.indexOf("qwe") != -1) { str = str.replace("qwe", "zxc"); }
打印试试看结果
格式如下
字符串.split("分割字符")
split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。
join('符号')
join()()方法用于合并数组。在合并完毕之后,返回的是一个字符串。
因为数组可以翻转 我们可以利用上面的两个代码(spilt()和join() )来进行字符串翻转
一般为
字符串.spilt().reverse().join()
字符串.toLocaleUpperCase()
字符串.toLocaleLowerCase()