js基础 字符串对象

  目录

        • 基本包装类型
        • 字符串的不可变性
        • 根据字符返回位置
          • indexOf()
          • lastIndexOf()
        • 根据位置返回字符
        • 字符串操作方法
        • 其他方法
          • replace()方法
          • split()方法
          • toUpperCase()
          • toLowerCase()
        • 小练习

学习来源:https://www.bilibili.com/video/BV1HJ41147DG

基本包装类型

  • 为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。
  • 基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
        // 下面代码有什么问题?
        var str = 'andy';
        console.log(str.length);

结果是:4

  • 按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为js 会把基本数据类型包装为复杂数据类型,其执行过程如下 :
        // 1、 生成临时变量,把简单类型包装为复杂数据类型
        var temp = new String('andy');
        // 2、赋值给我们声明的字符变量
        str = temp;
        // 3、销毁临时变量
        temp = null;

字符串的不可变性

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

        // 字符串的不可变性
        var str = 'andy';
        console.log(str);
        // 重新给str赋值,str之前保存的字符串"andy"不会被修改,依然在内存中。
        // 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。
        str = 'red';
        console.log(str);
        // 因为我们字符串的不可变,所以不要大量的拼接字符串
        var str = '1';
        for (var i = 1; i <= 1000000000; i++) {
            str += i;
        }
        console.log(str);  // 这个结果需要大量时间来显示,因为需要不断开辟新的空间

根据字符返回位置

 字符串所有的方法,都不会修改字符串本身(字符串的不可变性),操作完成会返回一个新的字符串。
 字符串通过基本包装类型可以调用部分方法来操作字符串,以下是返回指定字符的位置的方法:
js基础 字符串对象_第1张图片
此方法在数组对象中的应用:https://blog.csdn.net/qq_45645902/article/details/105464408

注释
 此两个方法区分大小写

indexOf()
  • 返回字符串元素索引号方法
  • indexOf(searchValue,fromIndex) 作用就是返回该字符串元素的索引号,从前面开始查找
  • 它只返回第一个满足条件的索引号
  • 它如果在字符串里面找不到该小字符串,则返回的是 -1

注释

  •  searchValue:必须。要查找的字符串值。如果没有提供确切地提供字符串,searchValue 会被强制设置为 “undefined”, 然后在当前字符串中查找这个值。例如:‘undefined’.indexOf() 将会返回0,因为 undefined 在位置0处被找到,但是 ‘undefine’.indexOf() 将会返回 -1 ,因为字符串 ‘undefined’ 未被找到。
  •  fromIndex:可选。开始查找的位置。如果 fromIndex 的值小于 0,或者大于 str.length ,那么查找分别从 0 和str.length 开始。(译者注: fromIndex 的值小于 0,等同于为空情况; fromIndex 的值大于 str.length ,那么结果会直接返回 -1 。)例如,‘hello world’.indexOf(‘o’, -5) 返回 4 ,因为它是从位置0处开始查找,然后 o 在位置4处被找到。另一方面,‘hello world’.indexOf(‘o’, 11) (或 fromIndex 填入任何大于11的值)将会返回 -1 ,因为开始查找的位置11处,已经是这个字符串的结尾了。
  •  若被查找的字符串 searchValue 是一个空字符串,将会产生“奇怪”的结果。如果 fromIndex 值为空,或者 fromIndex 值小于被查找的字符串的长度,返回值和以下的 fromIndex 值一样:
        'hello world'.indexOf('') // 返回 0
        'hello world'.indexOf('', 0) // 返回 0
        'hello world'.indexOf('', 3) // 返回 3
        'hello world'.indexOf('', 8) // 返回 8

  另外,如果 fromIndex 值大于等于字符串的长度,将会直接返回字符串的长度(str.length):

        'hello world'.indexOf('', 11) // 返回 11
        'hello world'.indexOf('', 13) // 返回 11
        'hello world'.indexOf('', 22) // 返回 11

  从前面一个例子可以看出,被查找的值是空值时,Javascript将直接返回指定的索引值。从后面一个例子可以看出,被查找的值是空值时,Javascript将直接返回字符串的长度。

lastIndexOf()
  • 返回字符串元素索引号方法
  • lastIndexOf(searchValue,fromIndex) 作用就是返回该字符串元素的索引号,从后面开始查找
  • 它只返回第一个满足条件的索引号
  • 它如果在该字符串里面找不到小字符串,则返回的是 -1
        var str= ['blue', 'red', 'green', 'blue'];
        console.log(str.lastIndexOf('blue'));  // 3
        console.log(str.lastIndexOf('yellow'));  // -1

注释
 searchValue:必须。要查找的字符串值。如果searchValue是空字符串,则返回fromIndex。
 fromIndex:可选。待匹配字符串searchValue的开头一位字符从 str的第fromIndex位开始向左回向查找。fromIndex默认值是 +Infinity。如果 fromIndex >= str.length ,则会搜索整个字符串。如果 fromIndex < 0 ,则等同于 fromIndex == 0。

案例

  • 1、查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数

思路:

  • 先查找第一个o出现的位置
  • 然后只要indexOf 返回的结果不是 -1 就继续往后查找
  • 因为indexOf 只能查找到第一个,所以后面的查找,利用第二个参数,当前索引加1,从而继续查找
        var str = 'oabcoefoxyozzopp';
        var flag = str.indexOf('o');
        var count = 0;
        for (var i = 0; i < str.length; i++) {
            if (flag != -1) {
                count++;
                console.log(flag);
                flag = str.indexOf('o', flag + 1)
            }
        }
        console.log('o 一共出现的次数是: ' + count + '次');

js基础 字符串对象_第2张图片
2、[‘red’, ‘blue’, ‘red’, ‘green’, ‘pink’,‘red’], 求 red 出现的位置和次数

        var str = ['red', 'blue', 'red', 'green', 'pink','red'];
        var flag = str.indexOf('red');
        var count = 0;
        for (var i = 0; i < str.length; i++) {
            if (flag != -1) {
                count++;
                console.log(flag);
                flag = str.indexOf('red', flag + 1)
            }
        }
        console.log('red 一共出现的次数是: ' + count + '次');

js基础 字符串对象_第3张图片

根据位置返回字符

 字符串通过基本包装类型可以调用部分方法来操作字符串,以下是根据位置返回指定位置上的字符:
js基础 字符串对象_第4张图片

  • 在上述方法中,charCodeAt方法返回的是指定位置上字符对应的ASCII码,ASCII码对照表如下:
    js基础 字符串对象_第5张图片
    案例
  • 判断一个字符串 ‘oabcoefoxyozzopp’ 中出现次数最多的字符,并统计其次数
  • 核心算法:利用 charAt() 遍历这个字符串
  • 把每个字符都存储给对象, 如果对象中没有该属性,就为1,如果存在了就 +1
  • 遍历对象,得到最大值和该字符
  • 注意:在遍历的过程中,把字符串中的每个字符作为对象的属性存储在对象中,对应的属性值是该字符出现的次数
  • 对象:https://blog.csdn.net/qq_45645902/article/details/105448546
        var s = {};
        // 遍历字符串,存储字符和出现次数给对象
        function count(str) {
            for (var i = 0; i < str.length; i++) {
                if (s[str.charAt(i)]) { // s[arr.charAt(i)] 得到的是属性值
                    s[str.charAt(i)]++;
                } else {
                    s[str.charAt(i)] = 1;
                }
            }
        }
        count('oabcoefoxyozzopp');
        console.log(s);
        // 遍历对象
        var max = 0;
        var ch = '';
        for (var k in s) {
            // k得到是属性名,s[k]得到的是属性值
            if (s[k] > max) {
                max = s[k];
                ch = k;
            }
        }
        console.log(max);
        console.log('出现次数最多的字符为' + ch);

字符串操作方法

 字符串通过基本包装类型可以调用部分方法来操作字符串,以下是部分操作方法:
js基础 字符串对象_第6张图片

其他方法

replace()方法

 replace() 方法用于在字符串中用一些字符替换另一些字符。

语法

    stringObject.replace(regexp/substr,replacement)

注释

  • regexp/substr:必需。需要被替换的字符串
  • replacement 必需。替换为的字符串
  • 它只会替换第一个字符

示例

        var str = 'andyandy';
        console.log(str.replace('a', 'b'));  // bndyandy
        // 有一个字符串 'abcoefoxyozzopp'  要求把里面所有的 o 替换为 *
        var str1 = 'abcoefoxyozzopp';
        while (str1.indexOf('o') !== -1) { //返回o的位置为0,将此o改为*,再次查找的字符o,返回4,将次位置的o改为*,……,如此下去,直到 indexOf() 返回-1
            str1 = str1.replace('o', '*');
        }
        console.log(str1);  // *abc*ef*xy*zz*pp
split()方法

 split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。其使用格式如下:

字符串.split("分割字符")

注释

  • join()是把数组转换为字符串 https://blog.csdn.net/qq_45645902/article/details/105464408
toUpperCase()

将字符串中所有字符转换为大写

语法

    stringObject.toUpperCase()  // 无参
toLowerCase()

将字符串中所有字符转换为大写

语法

    stringObject.toLowerCase()  // 无参

小练习

字符串:“abaasdffggghhjjkkgfddsssss3444343”,问题如下:

1、 字符串的长度
2、 取出指定位置的字符,如:0,3,5,9等
3、 查找指定字符是否在以上字符串中存在,如:i,c ,b等
4、 替换指定的字符,如:g替换为22,ss替换为b等操作方法
5、 截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
6、 找出以上字符串中出现次数最多的字符和出现的次数
7、 遍历字符串,并将遍历出的字符两头添加符号“@”

        var str = 'abaasdffggghhjjkkgfddsssss3444343';

        function len(str) {
            return str.length;
        }
        console.log(len(str));

        function place(str) {
            return str.charAt(6);
        }
        console.log(place(str));

        function TrueOrFalse(str) {
            if (str.indexOf('i')) {
                return '存在该字符';
            } else {
                return '不存在该字符';
            }
        }
        console.log(TrueOrFalse(str));

        function rep(str) {
            while (str.indexOf('g') != -1) {
                str = str.replace('g', '22');
            }
            return str;
        }
        console.log(rep(str));

        function cut(str) {
            return str.slice(1, 5);
        }
        console.log(cut(str));

        var s = {};
        function MaxAndCount(str) {
            for (var i = 0; i < str.length; i++) {
                if (s[str.charAt(i)]) {
                    s[str.charAt(i)]++;
                } else {
                    s[str.charAt(i)] = 1;
                }
            }
        }
        MaxAndCount(str);
        var max = 0;
        var ch = '';
        for (var k in s) {
            if (s[k] > max) {
                max = s[k];
                ch = k;
            }
        }
        console.log('出现次数最多的字符为:' + ch + '  次数为:' + max);

        var strArr = str.split("")
        var newStr = '';
        for (var i = 0; i < strArr.length; i++) {
            var newChar = "@" + strArr[i] + "@;";
            newStr += newChar;
        }
        console.log(newStr);

js基础 字符串对象_第7张图片

你可能感兴趣的:(js基础 字符串对象)