字符串的不可变

var str = ‘abc’; //常量区 类型为string
str = ‘hello’; //常量区
// 当重新给str赋值的时候,常量’abc’不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题

创建字符串对象

var str = new String('Hello World');   //堆区,类型为object
// 获取字符串中字符的个数
console.log(str.length);//11

字符串的内存

var s1 = "11";
var s2 = "11";
var s3 = new String("11");
var s4 = new String("11");
console.log(s1 == s2); //true
console.log(s2 == s3); //true   //自动拆箱
console.log(s2 === s3); //fasle //类型不一致
console.log(s3 == s4); //false
    <script>
        var str = "abc123"; //['a','b','c','1','2','3']
        console.log(str.charAt(2));
        console.log(str.charCodeAt(2));
        console.log(str[1]);

        //字符串是不可变
        var str1 = str.concat("mm");
        console.log(str1);

        //slice包前不包后
        var str2 = str1.slice(0,3);
        var str2 = str1.substring(0,3);
        console.log(str2);

        var str2 =  str1.substr(1,3);
        console.log(str2);

        //trim() 去除字符串首尾的空格
        var s = "  11  aa  bb  ";
        console.log(s.trim());

        //转换为大小写
        console.log(s.toUpperCase());
        console.log(s.toLowerCase());

        //从字符串查找
        var s = "abc123abc";
        var i = s.search("b");
        console.log(i);

        //替换字符串
        var ns = s.replace("b","k");
        var ns = s.replace(/b/ig,'k');
        console.log(ns);

        //根据ASCII构建字符串
        var ss = String.fromCharCode(120, 101, 102, 103);
        console.log(ss);

        //遍历字符串
        var s = "abc123abc";
        for (var i = 0; i < s.length; i++) {
            console.log(s.charCodeAt(i));
        }
    </script>

image.png

作业

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