JavaScript字符串的操作方法

字符串是一个非常神奇的数据类型。虽然它是一种基本数据类型,也没有length属性,但是却可以使用length和索引下标的方式来操作字符串
字符串类型,也称作包装数据类型,在操作时会给自己包装成一个伪数组的形式
支持length和索引下标的操作,一些数组的操作方法不支持,不支持用forEach()方法循环遍历字符串

var str= 'abcdefg';

console.log(str);
console.log(str[0]);  // 字符串中索引下标是0,实际是第一个字符,结果为a
console.log(str.length);  //  获取字符串的长度,也就是字符个数,结果为7
str.length = 2;       // 不能通过设定length属性来设定字符串串度
console.log(str);     // (接上一行)所以输出字符串没有变化,并不会截取为ab

使用for循环生成字符串所有的所有索引下标,通过索引下标获取对应的字符

for(var i = 0 ; i <= str.length-1 ; i++){
console.log(str[i]);}

使用for…in方法循环遍历字符串,自定义变量key中存储的是str字符串的索引下标,str[key] 就是索引下标对应的字符

for(var key in str){
console.log(str[key]);}

字符串是伪数组,不支持forEach() 方法循环遍历,会报错

str.forEach(function(val){
console.log(val);
})

▲变量.toString():将数据类型强制转化为字符串,括号内参数是转化的进制

var int = 100;
console.log( int.toString(8) );//结果为144

▲数组的扁平化:将多维数组,转化为一维数组

var arr = [1,2,3,4,5,[6,7,8,9,10,[11,12,13,[14,15,16]]]];
// 获取数组中数值的内容,以逗号间隔
var str = arr.toString();
// 再将字符串转成数组
var newArr = str.split(',');
console.log(newArr);
// 结果为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

转化之后的所有数据类型都是字符串,这种方法不能转化存储对象、函数的数组,是一种比较粗糙的方法
▲变量.indexOf():字符首次出现的位置
查找数组或者字符串中是否有某个数值后者某个字母,如果有这个内容,返回值是这个内容首次出现的索引下标;如果没有这个数据,返回值是 -1。这里执行的是 === 全等比较

var arr = ['北京','上海','广州',1,2,3,4,5];
console.log( arr.indexOf('广州') ); //  结果为2
console.log( arr.indexOf(5) ); //  结果为7
console.log( arr.indexOf(500) ); //  不存在500,所以结果为-1
console.log( arr.indexOf('5') ); //  数据类型不同,因为是全等比较所以结果为-1

▲lastIndexOf():字符最后出现的位置
查找数组或者字符串中是否有某个数值后者某个字母,如果有这个内容,返回值是这个内容最后一次出现的索引下标;如果没有这个数据,返回值是 -1。这里执行的是 === 全等比较

var arr1 = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];
console.log( arr1.indexOf(5) ); //  结果为4
console.log( arr1.lastIndexOf(5) ); //  结果为14
console.log( arr1.lastIndexOf('5') ); //  数据类型不同,因为是全等比较所以结果为-1

▲字符大小写切换:不会改变字符串存储的原始内容,如果需要改变,要做赋值操作
字符串.toUpperCase() 字符串中所有字符大写
字符串.toLowerCase() 字符串中所有字符小写

var str1 = 'hello word';
// 将函数值操作的返回值,赋值给变量
str1 = str1.toUpperCase();
console.log(str1); //  结果为'HELLO WORD'

var str2 = 'HELLO WORD';
str2 = str2.toLowerCase();
console.log(str2);//  结果为'hello word'

▲字符串.charAt():获取指定位置的字符
▲字符串.charCodeAt():获取指定位置的字符的编码数值,返回字符在ASCII码表中的数值,范围是0-255一共 256 个字符

var str3 = 'abcdefg';
console.log( str3.charAt(0) ); //  结果为a
console.log( str3.charCodeAt(0) ); //  结果为97

▲字符串.substring():字符串截取,从原始字符串(母串)中截取一部分字符串(子串)
参数1: 截取起始字符的索引下标
参数2: 截取结束字符的索引下标
定义1个参数: 从指定的索引位置开始,截取至字符串的结尾
定义2个参数: 从指定的索引位置开始,截取至指定的结束位置索引。包含起始索引,不包含结束索引。①若两个参数相同,结果是空字符串②如果是第1个数值小,第2个数值大,是向字符串结尾截取③如果是第1个数值大,第2个数值小,是向字符串起始截取④第一个参数是负数,相当于从字符串的起始位置开始截取⑤第二个参数是负数,相当于从指定的位置开始向前截取,截取到字符串的起始字符串,不包括起始字符

var str4 = 'abcdefghijklmn';
// 从索引下标是4,实际是第5个字符开始截取,到字符串的结尾
console.log( str4.substring(4) );//结果为efghijklmn

// 从索引是4,实际是第五个字符开始截取,截取至索引是5,实际是第六个字符结束。包括索引是4的字符,不包括索引是5的字符
console.log( str4.substring(4 , 5) );//结果为e

// 从索引是4的位置开始,向索引是0的位置截取。此时不会包括4索引的字符,会包括0索引的字符
console.log( str4.substring(4 , 0) );//结果为abcd

// 第一个参数是负数,效果是从字符串起始位置开始截取
console.log( str4.substring(-4) );//结果为abcdefghijklmn

// 第二个参数是负数,效果是从指定位置开始,向字符串的起始位置截取,截取至字符串的第一个字符,不包含指定位置的字符串。
console.log( str4.substring(3 , -6) );//结果为abc

▲字符串.substr():从母串中截取子串
参数1: 指定截取的起始位置
参数2: 指定截取的字符个数
语法1:只定义一个参数,从指定位置开始,截取至字符串结尾
语法2:定义两个参数,从指定位置开始,截取指定个数的字符
语法3:第一个参数是负数,指定起始位置是倒数第几个字符

var str5 = 'abcdefghijklmn';
 // 从索引是3,也就是第四个字符开始,截取至字符串结尾
console.log( str5.substr( 3 ) );//结果为defghijklmn

// 从索引是3,也就是第四个字符开始,截取3个字符
console.log( str5.substr( 3 , 3 ) );//结果为def

// 从倒数第三个字符开始截取,截取至字符串结尾
console.log( str5.substr( -3 ) );//结果为lmn

// 从倒数第三个字符开始截取,截取两个字符
console.log( str5.substr( -3 , 2 ) );//结果为lm

// 第二个参数是负数,结果是空的字符串
console.log( str5.substr( 3 , -2 ) );

▲字符串.replace():字符串内容替换,将指定的字符串内容替换为新的内容
第一个参数:字符串原有的,要替换掉的
第二个参数:字符串没有的,要新替换进来的
默认只能执行一次替换,要替换所有符合的内容,必须要配合正则表达式

var str6 = '河南信阳真是一个美丽的好地方,真的好美丽哦';
// 将关键词替换为漂亮,只能替换第一个符合的内容,后续符合的内容不会生效替换
str6 = str6.replace('美丽' , '漂亮');
console.log(str6);
//结果为 河南信阳真是一个漂亮的好地方,真的好美丽哦

▲字符串内容的删除
思路①以关键词为间隔符号,将字符串切割为数组。新数组的单元是没有关键词的
思路②将数组再拼接成字符串,以 ** 为间隔符号

var str = '信阳卧槽今天卧槽的天气卧槽好热';

var arr = str.split('卧槽'); //用卧槽当做间隔符号,切割成新数组
console.log(arr);//结果为信阳,今天,的天气,有点热

var newStr = arr.join('**');//用**作为拼接字符串的间隔符号,效果就是将关键词替换为**
console.log(newStr);//结果为信阳**今天**的天气**有点热
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值