字符串对象方法

6.1 基本包装类型

为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String、Number和Boolean。
基本包装类型就是把简单数据类型包装成复杂数据类型,这样基本数据类型就有了属性和方法

var str = ‘hello’;
console.log(str.length) ;
按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,因为js会把基本数据类型包装成复杂数据类型,执行过程如下:

//1.生成临时变量,把简单类型包装成复杂数据类型
var temp = new String(‘hello’);
//2.赋值给声明的字符变量
str = temp;
3.销毁临时变量
temo = null;

6.2 字符串的不可变

指的是里面的值不可变,看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。

 var str = 'hello';
        console.log(str);

        str = 'world';
        console.log(str);
        var str = '';
        for (var i = 0; i <= 100000; i++) {
            str += i;
        }
        console.log(str); // 结果需要花费大量的时间来显示,因为需要不断开辟新空间

(1)当重新给str赋值的时候,常量‘hello’不会被修改,依然在内存中
(2)重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
(3)由于字符串的不可变,在大量拼接字符串的时候会有效率问题、在这里插入图片描述

6.3 根据字符串返回位置

字符串的所有方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串。

方法名说明
indexOf(‘要查找的字符’,[开始的位置])返回指定内容在字符串中的位置,如果找不到就返回-1,开始的位置是index索引号
lastIndexOf()从后往前找,只找第一个匹配的
  1. indexOf(),根据字符串返回第一个满足条件的字符串索引 / 位置(只查找一个元素)【数组中也有】

(1)返回数组元素索引号,indexOf(字符串),从前面开始查找
(2)它只会返回第一个满足条件的索引号
(3) 如果该数组里面找不到元素,则返回 -1
(4)可以指定开始的位置,【】是可选的意思
(5)也可以检测一个字符串是否存在,== -1就是不存在

var str = '今天天气真不错,这天真不错';
        console.log(str.indexOf('天')); // 1
        console.log(str.indexOf('天', 2)); // 9
        if (str.indexOf('天') == -1) { // 可以检测一个字符串是否存在,==-1就是不存在
            alert('no');
        } else {
            alert('yes');
        }

综合案例(返回字符位置)

  • 查找字符串”abcoefoxyozzopp“中所有o出现的位置以及次数
 var str = 'abcoefoxyozzopp';
 var index = str.indexOf('o');
 var num = 0;
 while (index !== -1) {
      console.log(index); // 第一个o出现的位置
      num++;
      // indexOf只能查找第一个,所有后面的查找就利用第二个参数,当前所有加1,从而继续查找
      index = str.indexOf('o', index + 1);
   }
   console.log('o出现的次数是:' + num);
  • 数组[‘red’,‘blue’,‘red’,‘green’,‘pink’,‘red’,‘red’]中red出现的次数
var arr = ['red', 'blue', 'red', 'green', 'pink', 'red', 'red'];
var index = arr.indexOf('red');
var num = 0;
while (index !== -1) {
       console.log(index);
       num++;
       index = arr.indexOf('red', index + 1);
    }
   console.log('red出现的次数是:' + num);

6.4 根据位置返回字符串(重点)

方法名说明
charAt(index)返回指定位置的字符(index字符串的索引号),用法:str.charAt(0)
charCodeAt(index)获取指定位置处字符的ASCII码(index索引号),用法:str.charCodeAt(0)
str[index]获取指定位置处字符
  1. charAt(index),根据位置返回字符串
var str = 'hello';
console.log(str.charAt(1)); // e
//遍历所有的字符
for (var i = 0; i < str.length; i++) {
      console.log(str.charAt(i)); // 等价于 str[i]
   }
  1. charCodeAt(index),返回的是索引号的ASCII值,目的:可以判断用户按下了键盘哪个键
  var str = 'hello';
  console.log(str.charCodeAt(0)); // 104,返回的是 ASCII码
  1. str[index],H5新增的,获取指定位置字符
  var str = 'hello';
  console.log(str[0]); // h

综合案例(返回字符位置)

  • 判断字符串”abcoefoxyozzopp“中出现次数最多的字符,并统计次数
var str = 'abcoefoxyozzopp';
var o = {};
for (var i = 0; i < str.length; i++) {
      	var chars = str.charAt(i); // chars获得的是字符串中的 每一个字符
        if (o[chars]) { // o[chars] 得到的是属性值 例如:{a,b...}
              o[chars]++;
         } else {
              o[chars] = 1;
            }
        }
        console.log(o);
        var max = 0;
        var ch = ''; // 用来存储出现最多次数的字符
        // 遍历对象属性
        for (var k in o) {
            // k得到的是 属性名
            // o[k]得到的是 属性值
            if (o[k] > max) {
                max = o[k];
                ch = k;
            }
        }
        console.log('出现最多的字符是:' + ch + ',共' + max + '次');

6.5 字符串操作方法(重点)

方法名说明
concat(str1,str2,str3…)concat() 方法用于连接两个或多个字符串。拼接字符串,等效于+,+更常用
substr(start,length)从start位置开始(索引号),length取的个数
slice(start,end)从start位置开始(索引号),截取到end位置,end取不到
substring(start,end)从start位置开始(索引号),截取到end位置,end取不到,基本和slice相同,但是不接受负值
  1. concat(‘字符串1’,‘字符串2’,…),拼接字符串【数组中也有】
 var str = 'hello';
 var a = '18';
 console.log(str.concat(a, 'world')); // hello18world
 console.log(str + a); // helloworld
  1. substr(start,length),通过索引指定位置开始查找一个或多个字符串

(1)substr()类似于数组的splice(),但是数组的是删除,字符串的是查找
(2)参数:
a.第一个参数,开始位置的索引(包括开始位置)
b.第二个参数,截取的长度(截取多少个数)

var str = 'hello';
console.log(str.substr(3, 2)); // lo
  1. slice(start,end),可以从字符串中截取指定的内容【数组中也有】

(1)不会影响原字符串,而是将截取到的内容返回
(2)参数:[左闭右开)
a.第一个参数,开始位置的索引(包括开始位置)
b.第二个参数,结束位置的索引(不包括结束位置)
-第二个参数也可以省略,则返回开始位置后的索引数
-也可以传递一个负数作为参数,负数的将会从后边计算

 var str = 'abcdefg';
 var re = str.slice(0, 2); // ab
 re = str.slice(1); // 从索引为1开始后的全部
 re = str.slice(-1); // g
 re = str.slice(0,-3); // abcd
 console.log(re);
  1. substring(start,end),可以用来截取一个字符串,跟slice()类似

参数:[左闭右开)
a.第一个参数,开始位置的索引(包括开始位置)
b.第二个参数,结束位置的索引(不包括结束位置)
-不同的是这个方法不能接收负数作为参数,如果传递了一个负值,则默认使用0
-而且他还会自动调整参数的位置,如果第二个参数小于第一个参数,则自动交换位置

 var str = 'abcdefg';
 var re = str.substring(0, 2); // ab
 re = str.substring(1, 0); // a == str.substr(0,1);
 console.log(re);

6.6 字符串转换为数组

方法名说明
split()字符串转换为数组

split(‘分隔符’),字符串转换为数组,以字符串中存在的分隔符去分割

(1)split()可以转换为数组,分隔符取决于字符串中用什么分开
(2)跟数组的join()方法相反,是数组转为字符串

  var str = 'red,pink,blue';
  console.log(str); // red,pink,blue
  console.log(str.split(',')); // ["red", "pink", "blue"]
  var str2 = 'red&pink&blue';
  console.log(str2.split('&')); // ["red", "pink", "blue"]

6.7 字符串其余方法

方法名说明
replace()将字符串中指定内容替换为新内容,不影响原数组
toUpperCase()将字符串转换大写
toLowerCase()将字符串转换小写
  1. replace(‘被替换的字符’,‘替换为的字符’),替换字符串

(1)不会影响原字符串,而是将截取到的内容返回
(2)参数:
a.第一个参数,被替换的内容
b.第二个参数,新的内容
(3)默认只会替换第一个满足条件的

var str = 'blueblue';
console.log(str.replace('b', '2')); // 2lueblue 只替换第一个b
  • 循环替换所有的字符
 var str = 'blueblue';
 while (str.indexOf('b') !== -1) {
     str = str.replace('b', '*');
  }
  onsole.log(str); // *lue*lue,把 b全部替换了
  • 正则替换所有的字符
 var str = 'bluebluebbbbbb';
 var re = str.replace(/b/gi, "*"); // i (忽略大小写) g (全文查找出现的所有匹配字符)
 console.log(re); // *lue*lue******
  1. toUpperCase(),将字符串转换成大写并返回
  2. toLowerCase(),将字符串转换成小写并返回
 var str = 'abcde';
 console.log(str.toUpperCase()); // ABCDE
 str = 'ABCDE';
 console.log(str.toLowerCase()); // abcde

综合案例

字符串"abaasdffggghjjkkgfddsssss3444343",完成以下问题
1.字符串的长度
2.取出指定位置的字符串,如:a,4,3…
3.查找指定字符是否在以上字符串中存在,如:i,c…
4.替换指定的字符,a替换成22,4替换成k
5.截取指定开始位置到结束位置的字符,如:取1-5的字符串
6.找出以上字符串中出现次数最多的字符和次数
7.指定字符出现的位置和次数

//1.
 var str = 'abaasdffggghjjkkgfddsssss3444343';
 console.log(str.length);
var str = 'abaasdffggghjjkkgfddsssss3444343';
//2.指定位置的字符(一次只能取一个)
console.log(str.charAt(1));
console.log(str.charAt(3));
for (var i = 0; i < str.length; i++) {
    console.log(str.charAt(i)); // 循环可以取出每个字符
}
 var str = 'abaasdffggghjjkkgfddsssss3444343';
 //3.
 var a = '3'; // 存在
 a = 'i'; // 不存在
 if (str.indexOf(a) == -1) {
     console.log('该数不存在');
 } else {
     console.log('存在');
 }
var str = 'abaasdffggghjjkkgfddsssss3444343';
//4.替换字符(一次只能替换一个)
console.log(str.replace('a', '22')); 
//循环替换所有的字符
while (str.indexOf('a') !== -1) {
     str = str.replace('a', '22');
}
console.log(str);
//正则替换所有字符
var re = str.replace(/4/gi, 'k');
console.log(re);
var str = 'abaasdffggghjjkkgfddsssss3444343';
//5.
var re = str.slice(1, 5); // (start,end) end取不到
re = str.substring(1, 5); // (start,end) end取不到
re = str.substr(1,5); // (start,length)
console.log(re);
var str = 'abaasdffggghjjkkgfddsssss3444343';
//6.
var o = {};
for (var i = 0; i < str.length; i++) {
     var chars = str.charAt(i);
     if (o[chars]) {
          o[chars]++;
      } else {
          o[chars] = 1;
      }
 }
console.log(o);
var max = 0;
var ch = '';
for (var k in o) {
   if (o[k] > max) {
        max = o[k];
        ch = k;
     }
 }
console.log('出现最多的字符是:' + ch + ',共' + max + '次');
var str = 'abaasdffggghjjkkgfddsssss3444343';
//7.
var a = 'a'; // 要查找的字符
var index = str.indexOf(a);
var num = 0;
while (index !== -1) {
     console.log(index);
     num++;
     index = str.indexOf('a', index + 1);
 }
 console.log(a + '出现的次数为:' + num);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值