JavaScript的字符串

基本包装类型

按道理基本数据类型是没有属性和方法的,而对象才有属性和方法。但是,
为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。
基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
所以我们才可以在简单数据类型String上使用length属性

// 下面代码有什么问题?
var str = 'andy';
console.log(str.length);
//js 会把基本数据类型包装为复杂数据类型,其执行过程如下 :
// 1. 生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
// 2. 赋值给我们声明的字符变量
str = temp;
// 3. 销毁临时变量
temp = null;

字符串的不可变

指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
当重新给字符串变量赋值的时候,变量之前保存的字符串不会被修改,依然在内存中重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。
由于字符串的不可变,在大量拼接字符串的时候会有效率问题

查找特定字符在字符串中的下标

  • indexOf()方法
    这个方法和数组的是一样的。从前往后查找,如果找不到就返回 -1 ,找到就返回第一个出现的下标位置。
    语法:indexOf(‘要查找的字符’,开始查找的位置下标),第二个参数是可选的,不写默认从0开始
 var str = '改革春风吹满地,春天来了';
console.log(str.indexOf('春'));
console.log(str.indexOf('春', 3)); // 从索引号是 3的位置开始往后查找

例子:查找字符串中某个字符出现的次数

// 查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
        // 核心算法:先查找第一个o出现的位置
        // 然后 只要indexOf 返回的结果不是 -1 就继续往后查找
        // 因为indexOf 只能查找到第一个,所以后面的查找,一定是当前索引加1,从而继续查找
        var str = "oabcoefoxyozzopp";
        var index = str.indexOf('o');
        var num = 0;
        // console.log(index);
        while (index !== -1) {
            console.log(index);
            num++;
            index = str.indexOf('o', index + 1);
        }
        console.log('o出现的次数是: ' + num);
  • lastIndexOf()方法
    lastIndexOf()就是和上面indexOf方法一样,只不过是从后往前查找。也是可以指定开始查找位置参数的。

根据位置返回字符串中的某个字符

  • charAt(index)方法
    charAt(index)方法返回指定位置的字符,参数index是指定字符在字符串中的下标
var str = 'andy';
console.log(str.charAt(3)); // 'y'
  • charCodeAt(index)方法
    返回相应索引号的字符ASCII值,在判断用户按下哪个键时候会用到。
var str = 'andy';
console.log(str.charCodeAt(0)); // 97
  • str[index]写法
    H5 新增的,IE8+支持,作用和charAt()方法是一样的
var str = 'andy';
console.log(str[3]); // 'y'
  • search()写法
    用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
var str = "Visit abc!";
var n = str.search(/abc/i);  // n=6

截取字符串

  • substr(start,length)方法
    substr(开始截取的位置下标,截取几个字符)
 var str1 = '改革春风吹满地';
console.log(str1.substr(2, 2)); // '春风'
  • slice(start,end)方法
    这个方法和数组中的一样,从start位置开始截取,在end位置结束,截取出来的内容不包括end位置的字符。

拼接字符串

  • concat()方法
    concat()方法用于连接两个或多个字符串,拼接字符串,等效于+,+更常用
var str = 'andy';
console.log(str.concat('red')); // 'andyred'

替换字符串

用法1:replace(‘被替换的(原来的)字符串’,‘替换(新的)字符串’)
用法2:replace(‘正则表达式’,‘替换(新的)字符串’)
用法3:replace(‘正则表达式’,‘$1’)

写法意思
$ 1 ~ $ 99表示与 正则表达式中的第 1 到第 99 个子表达式相匹配的文本。
$ &表示匹配成功的那个字符串
$ `位于匹配子串左侧的文本。
$ ’位于匹配子串右侧的文本。
$ $表示一个 $ 符号

用法4:replace(‘正则表达式’,function(match,d1,d2,……,index,oristr){ return ‘替换(新的)字符串’ });
参数名称是自定义的,可以改,但是它的含义顺序是不变的。

参数意思
match匹配成功的那个字符串
d1 ~ d99与 正则表达式中的第 1 到第 99 个子表达式相匹配的文本。
index匹配成功的那个字符串出现的位置
oristr原字符串

用法1的介绍:
replace() 方法用于在字符串中用一些字符替换另一些字符,其使用格式如下:
字符串.replace(被替换的字符串, 要替换为的字符串);

注意:这个方法只会替换第一个字符。(可以使用循环解决,就是indexOf方法作为循环条件)

联想 --》正则表达式中的替换字符,也是这个方法,只不过第一个参数变成正则表达式,而且正则表达式加了 g 参数就变成可以替换全部字符了。

 var str = 'andyandy';
console.log(str.replace('a', 'b')); // 'bndyandy'

字符串转换为数组

  • split()方法
    split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。
    其使用格式如下:字符串.split(“分割字符”)
var str2 = 'red, pink, blue';
console.log(str2.split(','));
var str3 = 'red&pink&blue';
console.log(str3.split('&'));

字符串大小写转换

toUpperCase() 转换为大写
toLowerCase() 转换为小写

ES5中的新增方法

  • trim( )方法
    作用:删除字符串的两端空白字符
    返回值:trim( )方法并不影响原字符串本身,它返回的是一个新的字符串
    注意:不会去除字符串中间的空格,只会去除字符串前后两端的
    调用方法:
var newStr = str.trim()

ES6中的新增方法

  • 模板字符串
    ES6新增的创建(声明)字符串的方式,使用反引号(叹号左边的那个键)定义。
let name = `zhangsan`; 

模板字符串中可以通过 ${ 变量名 } 来解析变量。(以前传统的方法是需要字符串拼接来解析变量)

 let name = '张三';
 let sayHello = `hello,my name is ${name}`; // hello, my name is zhangsan 

模板字符串中可以换行 ,输出的内容也是带换行的(以前传统的需要所有字符串内容都写在一行上,虽然可以使用 ’ \ ’ 来折行但还是不方便)
在模板字符串中可以调用函数

 const sayHello = function () {
 	return '哈哈哈哈 追不到我吧 我就是这么强大';
 };
 let greet = `${sayHello()} 哈哈哈哈`;
 console.log(greet); // 哈哈哈哈 追不到我吧 我就是这么强大 哈哈哈哈
  • startsWith() 和 endsWith()
    startsWith():表示参数字符串是否在原字符串的头部(原字符串是否以XX开头),返回布尔值
    endsWith():表示参数字符串是否在原字符串的尾部,返回布尔值
 let str = 'Hello world!'; 
 str.startsWith('Hello') // true  
 str.endsWith('!')       // true 
  • repeat()
    repeat方法表示将原字符串重复n次,返回一个新字符串。
    接收一个数值作为参数,表示需要重复的次数。
'x'.repeat(3)      // "xxx"
'hello'.repeat(2)  // "hellohello" 
  • includes( )
    作用:判断一个字符串中是否包含一个指定的值
    联想:indexof( )方法
    返回值:包含返回true,否则返回false
    参数:
    第一个参数是必需的,表示需要查找是否存在这个值。
    第二个参数是可选的,表示从该索引处开始查找 。如果为负值,则按升序从 array.length + fromIndex 的索引开始搜索。默认为 0。
    调用方法:
'abcd'.includes('bc'); //返回的是true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值