JavaScript学习笔记(六)——JS中的字符串

存储

  • 计算机只能够存储二进制
  • 存储字符串转为二进制
  • 需要有 对照表 方便将 字符二进制 进行转换
  • 这样的 对照表 叫做 编码方式 常见的有 asciiunicode

定义字符串的新的方式

    var str = new String("a");
    console.log(typeof str); // object
    // 转换为字符串的方式就是str.toString();

包装类型:在面向对象的思想中,一切都得是对象。而JS中有一些基本类型,此时就需要 包装 一下,将这些基本类型 包装 成对象类型。

  • 在JS中,基本数据类型(除了undefined、null之外),都有包装类型
  • 字符串的包装类型 String()
  • 布尔型的爆猪肝类型 Boolean()
  • 数字的包装类型 Number()

属性

  • length属性:length属性表示字符串的长度
    // 字符串也可以通过下标获取对应的字符
    var a = "abcdefg";
    console.log(a[2]); // c
    console.log(a.length); // 7

方法

  • charAt 参数是数字,返回值是该数字所指向的下标字符
  • charCodeAt 参数是数字,返回值是该数字所指向的下标字符的编码
  • split 参数是分隔符,返回值是以该参数作为切割之后的数组
  • slice 该方法用于截取字符串的一段,第一个参数表示截取的开始位置(包含) 第二个参数表示截取的结束位置(不包含),左闭右开
  • concat 用法与数组方法中的concat一致,都是拼接任意个内容,但是不会拆分数组,只会将内容向字符串进行转换
  • indexOf 将会返回参数字符串的第一个字符在原字符串中的位置,如果没有匹配到完全一样的字符串,返回-1
  • match 用于匹配字符串,但是它更与正则表达式配合的多
  • search 查询字符串
  • toUpperCase 该方法用于将所有的字符串中的英文大写
  • toLowerCase 该方法用于将所有的字符串中的英文小写
  • replace 替换,将原字符串中的某些个字符替换成参数指定的字符
  • substring 该方法用于截取字符串中的一段,与slice很类似,也是截取字符串,但是slice的参数只能是参数一小于参数二,substring能够参数一小于参数二
  • substr 该方法也用于截取字符串中的一段 第一个参数依旧表示截取的开始位置 第二个参数表示要截取的字符串的长度
  • 注意:字符串的所有方法都不会改变原字符串
        // 1、charAt 参数是数字 返回值是该数字所指向的下标字符
        var str1 = "abc";
        var char1 = str1.charAt(1);
        console.log(char1); // b
        console.log(str1[1]); // b
        
        // 2、charCodeAt 参数是数字 返回值是该数字所指向的下标字符的编码
        var code1 = str1.charCodeAt(2);
        console.log(code1); // c的字符编码 99
        var str2 = "你好";
        var code2 = str2.charCodeAt(0);
        console.log(code2); // “你”的字符编码 20320

        // 3、split 参数是分隔符 返回值是以该参数作为切割之后的数组
        var str3 = "1-2-3-4";
        var arr1 = str3.split("-");
        console.log(str3); // "1-2-3-4"
        console.log(arr1); // ["1", "2", "3", "4"]

        // 4、slice 该方法用于截取字符串的一段 第一个参数表示截取的开始位置(包含) 第二个参数表示截取的结束位置(不包含)
        // 用法和数组一样
        var str4 = "abcdefg";
        var str4_1 = str4.slice(0); 
        var str4_2 = str4.slice(1,4); 
        var str4_3 = str4.slice(1,-2);  
        var str4_4 = str4.slice(-5,-1); 
        console.log(str4_1); // abcdefg
        console.log(str4_2); // bcd
        console.log(str4_3); // bcde
        console.log(str4_4); // cdef

        // 5、concat 
        // 用法与数组一致,都是拼接任意个内容,但是不会拆分数组,只会将内容向字符串进行转换
        var str5_1 = "abc";
        var str5_2 = "def";
        var str5_3 = str5_1.concat(str5_2,[1,2,3,[4,5]],{});
        console.log(str5_3); // abcdef1,2,3,4,5[object Object]

        // 6、indexOf() 将会返回参数字符串的第一个字符在源原字符串中的位置
        // 如果没有匹配到完全一样的字符串,返回-1
        var str6 = "abcdefgcdefdddd";
        var str6_1 = str6.indexOf("cde"); // 默认从下标0开始查询
        console.log(str6_1); // 2
        var str6_2 = str6.indexOf("cde",5); // 第二个参数表示从哪个下标开始查询
        console.log(str6_2); // 7
        var str6_3 = str6.indexOf("cdf");
        console.log(str6_3); //-1

        // 7、match() 用于匹配字符串,但是它更与正则表达式配合的多 
        var str7 = "abcdefg";
        console.log(str7.match("ef")); // ["ef", index: 4, input: "abcdefg", groups: undefined]

        // 8、search() 查询字符串
        var str8 = "abcdefcdefddd";
        console.log(str8.search("cde")); // 2 默认从下标0开始查询

        // 9、toUpperCase 该方法用于将所有的字符串中的英文大写
        var str = "abc";
        var str1 = str.toUpperCase();
        console.log(str1); // ABC       

        // 10、toLowerCase 该方法用于将所有的字符串中的英文小写
        var str = "ABCDEFG,你好,abcde";
        var str1 = str.toLowerCase();
        console.log(str1); // abcdefg,你好,abcde 

        // 不区分大小写的验证码原理
        var code = "abcd";
        var check = prompt("请输入验证码","");
        console.log(code);
        console.log(code === check.toLowerCase());

        // 11、replace
        var str11 = "这个敏感字眼——卧槽,卧槽——是敏感字眼";
        console.log(str11);
        while(str11.indexOf("卧槽") != -1){
            str11 = str11.replace("卧槽","**");
        }
        console.log(str11);
        // 以下方法是使用了正则的知识
        var str11_1 = "这个敏感字眼——卧槽,卧槽——是敏感字眼";
        var str11_2 = str11_1.replace(/垃圾/g,"xx");
        console.log(str11_2);

        // 12、substring 该方法用于截取字符串中的一段
        // 与slice很类似,也是截取字符串,但是slice的参数只能是参数一小于参数二,substring能够参数一小于参数二
        var str12_1 = "abcdefg";
        var str12_2 = str12_1.slice(1,5);
        var str12_3 = str12_1.substring(1,5);
        var str12_4 = str12_1.substring(5,1);
        console.log(str12_1);
        console.log(str12_2); // bcde
        console.log(str12_3); // bcde
        console.log(str12_4); // bcde

        // 13、substr 该方法也用于截取字符串中的一段 第一个参数依旧表示截取的开始位置 第二个参数表示要截取的字符串的长度
        var str13 = "abcdefghijkl";
        var str13_1 = str13.substr(3, 5);
        console.log(str13_1); // defgh

为什么字符串居然能够调用方法,它不是基本数据类型吗?

字符串这个数据类型,在JS中运行时,JS引擎中解析的时候会先把 a 这个"str"值替换为 var s = new String(“str”);此时就成了一个字符串对象。

        var str1 = new String("abc"); // 这是一个字符串对象
        var str2 = "abc"; // 这是一个字符串
        console.log(typeof str1); //object
        console.log(typeof str2); //string

函数的传参规则

JS中的函数可以执行时传递参数。那么如果在函数内部修改传递进去的参数,会不会影响到函数外部的值呢?
函数在传递参数时,到底是如何传参的呢?

JS中的数据类型分两种: 基本数据类型,引用数据类型
基本数据类型的数据在传递时,复制传递,也就是复制了一份并传递进去,所以在函数内部,如何操作都只是在操作副本。与外部的数据无关。

引用数据类型的数据在传递时,传递引用,也就是把地址复制了一份并传递进去,所以函数内部是可以得到函数外部的数据保存的地址的,如果在函数内部打点或者方括号修改地址内容,则会影响到函数外部,如果在函数内部使用 = 修改变量保存的内容,则不会影响函数外部。

    // 在函数内部修改值类型参数
    var a = 123;
    function demo(b) {
        b = 12;
    }
    demo(a);
    console.log(a); // 123
    // 在函数内部使用等号修改引用类型参数
    var obj = {};
    function demo(b) {
        b = 123;
    }
    demo(obj);
    console.log(obj); // {}
    // 在函数内部使用方括号或者点语法修改引用类型参数
    var obj = {};
    function demo(b) {
        b.a = 10;
        b["b"] = 11;
    }
    demo(obj);
    console.log(obj); // {a: 10, b: 11}
    // 在函数内部先使用方括号或者点语法修改 再使用等号
    var obj = {};
    function demo(b) {
        b.a = 10;
        b["b"] = 11;
        b = {};
        b.c = 12;
    }
    demo(obj);
    console.log(obj); // {a: 10, b: 11} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值