day6:字符串

字符串

概述:

字符串也是数据结构里面串的一种,字符串是一种基础值类型,基础值类型不可变,字符串的相关方法不能改变原本的字符串,所以只能返回新的字符串作为对应的方法。字符串解决问题使用频繁,常用于解决查找的相关问题(马拉车算法 解决回文字符串 等)

字符串的声明

赋值声明

//单引号双引号都可以
var str = '字符串'

通过new关键词来构建 

var str = new String('传入任意类型')

两者得区别:

  • new关键词声明的字符串 用typeof验证得到的是object 但赋值声明得到的是String 类型
  • 使用new关键词声明的字符串两个是不相等的
        // 赋值
        // var str = '字符串'
        // 使用new关键词来构建
        // var str = new String('字符串')
        var str = 'hello'
        var str1 = 'hello'
        console.log(str == str1)//true
        console.log(str === str1)//ture
        var str2 = new String('hello')
        var str3 = new String('hello')
        console.log(str2 == str3)//false

        console.log(str2 === str3)//flase
        console.log(str == str2)//true
        console.log(str1===str3)//flase

es6新增字符串模板``

        // es新增字符串模板`` ${}表示引用变量 传入的是变量明 可传入符合js语法的
        var str4 = 'hello'
        var str5 = `jack ${str4}+1`
        console.log(str5)

字符串的属性及访问

length属性 表示字符串的长度 (只读属性)

        var str = 'hello'
        console.log(str.length)//5
        str.length = 10 //无意义 字符串不可变
        console.log(str.length)//5

字符串访问其他某个内容通过下标访问

        //字符串属于串结构的一种是有序的 可以通过下标来访问对应里面的某个字符串
        var str = 'hello'
        console.log(str[0])//h
        str[0]='A'
        console.log(str)//hello
        console.log(str[0])//h
        

字符串的相关方法 (字符串本身不可变 一定要有返回值)

字符串的相关方法是以返回值来操作的

indexOf 根据传入的字符串返回第一次出现的下标 (找不到返回-1)从前往后

console.log('aaabbb').indexOf('a')//0
console.log('aaabbb').indexOf('ab')//2

lastIndexOf 根据传入的字符串返回第一次出现的下标 (找不到返回-1)从后往前查找

console.log('aaabbb').lastIndexOf('a')//2
console.log('aaabbbab').lastIndexOf('ab')//6

charAt(根据下标返回字符串)

    //charAt 根据下标返回字符串
        console.log('asdfdsa'.charAt(3))//f

charCoalAt(根据下标返回字符串的ASCII码)

      console.log('asdfdsa'.charCodeAt(3))//102

静态方法String.fromCharCode

    //静态方法
    //将ascii码转为字符串 String
    var str = String.fromCharCode(23)//返回一个字符串
    console.log(str)
    

 search 方法类似于indexOf 支持正则表达式

    //search 返回对应的下标 找不到返回-1 支持正则表达式
    console.log('aaabbb'.search('a'))//0返回对应下标
    console.log('aaabbb'.search('ab',3))//2 search只有一个参数 没有开始位置

底层实现indexOf 及lastIndexOf

​
        function myIndexOf(value,index,str){
            if(value == undefined){
                throw new Error('传参个数错误')
            }
            //如果index没有传入默认值
            if(index == undefined){
                index = 0
            }
            //遍历查找
            // 得到对应的长度
            // 如果当前的index+value.length大于本身字符串的长度 返回-1
            if(index+value.length>str.length){
                return -1
            }else{
                //遍历对应的字符串
                for(var i=index;i<str.length-value.length;i++){
                    //根据value的长度来拼接
                    var v = str[i]
                    for(var j=1;j<value.length;j++){
                        v+=str[i+j]
                    }
                    //根据对应的value值来比较
                    if(value == v){
                        return i
                    }
                }
            }
            return -1
        }
        console.log(myIndexOf('ab',0,'asdfgdsabced'))



        function myLastIndexOf(value,index,str){
            if(value == undefined){
                throw new Error('传参个数错误')
            }
            //如果index没有传入默认值
            if(index == undefined){
                index = 0
            }
            //遍历查找
            // 得到对应的长度
           
                for(var i=index;i>=0;i--){
                    //字符串拼接
                    var v=str[i]
                    for(var j=1;j<value.length;j++){
                        v+=str[i+j]
                    }
                    if(v==value){
                        return i
                    }
            }
            return -1
        }
        console.log(myIndexOf('ab',0,'asdfgdsabced'))

​

    //静态方法

    //将ascii码转为字符串 String

    var str = String.fromCharCode(23)//返回一个字符串
    console.log(str)

截取的相关方法(只传一个参数默认截取所有)

substring 传入开始下标及结束下标(包含开始不包含结束的下标)

        console.log(str)//c
        var str2 = 'abcdjll'.substring(3)
        console.log(str2)//djll

substr 从下标开始处截取 

        var str3 = 'dfvfcdxs'.substr(3,4)//从下标3开始截取四位
        console.log(str3)//fcdx
        var str4 = 'jfnjdke'.substr(3)
        console.log(str4)//jdke

slice 传入开始下标及结束下标 得到的结果不包含结束下标 如果不传参那么默认截取所有

        var str5 = 'hjkldf'.slice(2,3)//包含开始 不包结束
        console.log(str5)//k
        var str6 = 'hbiubco'.slice(2)
        console.log(str6)//iubco
        var str7 = 'cdnm'.slice()//不传参 默认截取所有
        console.log(str7)//cdnm

支持正则表达的四个方法

 search 查找 

        // search 查找 
        var str= 'abcd'
        //\w数字字母下划线
        var index = str.search(/\w/)//"//"表示正则 
        console.log(index)//返回下标0 因为第一个就是\w所包含的内容

 match 匹配 返回一个数组(包含匹配的内容) 只执行一次 

        // match 匹配 返回一个数组(包含匹配的内容) 只执行一次
        var str = 'abc?123'
        var strArr = str.match(/\w/)//如果想执行多次在正则后面加一个g
        console.log(strArr)

replace 替换 根据对应匹配内容进行替换 只执行一次

        //replace 替换 根据对应匹配内容进行替换 只执行一次
        var str = 'abcabc'
        var str1 = str.replace('a','f')//传入字符串形式 将a替换为f
        var str1 = str.replace(/a/,'f')
        console.log(str1)//fbcabc
        //高阶函数写法的replace 支持传入函数作为参数
        var replaceStr = str.replace(/a/,function(value){
            console.log(value)//a
            return 'f'
        })
        console.log(replaceStr)//'fbcabc'

  split 分割 传入对应的字符串分割成数组返回

        // split 分割 将对应的字符串分割成数组返回
        //与数组的join相反 将数据拼接成字符串返回 将字符串拆分为数组
        var str = 'a,b,c'
        //如果不传参 会将整个字符串直接填入数组返回
        //var arr = str.split(',')
        var arr = str.split(/,/)
        console.log(arr)//['a','b','c']

连接方法

concat 

    var str = 'abc'
    //返回一个新字符串
    var concatStr = str.concat('word')
    console.log(concatStr)//abcword

练习 

        //练习
        //将"abcabcabcabc"中的bc全部替换为hello
 
        var str = 'abcabcabcabc'
        //先找bc再替换
        while(str.search('bc')!=-1){//找不到返回-1
            str = str.replace('bc','hello')
        }
        console.log(str)


        //统计一个字符串在另一个字符串中出现的次数
        function fnStr(str1,str2){
            var newStr = str2.split(str1)
            
            return newStr.length-1
        }
        var num = fnStr('bc','abcabcaccabc')
        console.log(num)

其他相关函数

去除首尾空格 trim

var str = ' a b c '
console.log(str.trim())

转大小写 

  • toUpperCase 转大写
  • toLowerCase 转小写
  • toLocalUpperCase 转大写 根据本地格式进行转换
  • toLocalLowerCase 转小写

//toString 转为字符串 是所有对象存在的方法(万物皆对象)

统计一个字符串中大写字符串的个数

        //统计一个字符串中大写字符串的个数
        function fn(str){
            //先遍历
            var num = 0
            for(var i =0;i<str.length;i++){
                if(str.charAt(i)>='A'&&str.charAt(i)<='Z'){
                    num++
                }
            }
            return num
        }
        console.log(fn("AdaCas"))
        //利用正则
        console.log('NIububuB'.match(/[A-Z]/g).length)

html元素的相关办法 

sub返回一个sub标签

        //sub返回一个sub标签
        var str = 'hello world'
        console.log(str.sub())//<sub>hello world</sub> 
        document.write(str.sub())

fontcolor

        //fontcolor
        console.log(str.fontcolor('green'))
        document.write(str.fontcolor('green'))

fontsize


        //fontsize
        console.log(str.fontsize(16))
        document.write(str.fontsize(24))

练习

HOW ARE YOU ? I AM DJ.DJ DJ DJ ... 将DJ变成**并且变红 只有首字母大写

​
            var str = 'HOW ARE YOU ? I AM DJ DJ DJ DJ DJ... '
            str =str.toLowerCase().trim()  //全部转为小写  
            var arr = str.split(' ')//拆分成一个个内容
            //遍历数组进行操作
            for(var i=0;i<arr.length;i++){
                //出现dj转**
                arr[i] = arr[i].replace('DJ','**'.fontcolor('red'))
                //a[i]里面是一个个字符串
              //将首字母转大写字母
                arr[i]=arr[i][0].toUpperCase()+arr[i].slice(1)
            }
            var str = arr.join(' ')
            document.write(str)

​

 

总结

  • 字符串不可变 但可以返回一个新字符串进行操作
  • 字符串indexOf方法用于获取下标 charAt用于获取字符串
  • 字符串截取方法substring slice 用开始下标和结束下标作为参数 substr 用个数截取
  • 字符串支持正则写法 search match replace split
  • 字符串用concat进行拼接
  • 字符串使用trim去除收尾空格,toUpperCase转大写 toLowerCase 转小写

Math类(数学类)

包含了数学操作的方法及属性(里面的内容是静态的 直接Math.)

属性

PI Math.PI π

E Math.E 科学计数法

方法

  • max 最大值 可传入多个值
  • min 最小值 可传入多个值
  • pow 取幂次方
  • sqrt 开平方
  •  ceil 向上取整
  • round 四舍五入
  • floor 向下取整
  • random 取0-1之间的随机数 [0,1)
  • abs 取绝对值
        //Math是数学类,它里面包含关于数学操作的方法及属性(里面的内容为静态)
        // max 最大值 可传入多个值
        console.log(Math.max(1,2,34,53,55,32))//55
        // min 最小值 可传入多个值
        console.log(Math.min(1,2,34,53,55,32))//1
        // pow 幂次方
        console.log(Math.pow(2,3))//8
        // sqrt 开平方
        console.log(Math.sqrt(4))//2
        // ceil 向上取整
        console.log(Math.ceil(2.345))//3
        // round 四舍五入
        console.log(Math.round(2.345))//2
        // floor 向下取整
        console.log(Math.floor(2.345))//2
        //random 随机数
        console.log(Math.random())
        //abs 绝对值
        console.log(Math.abs(-9))//9
        //三角函数 一度=π/180
        console.log(Math.sin(45*Math.PI/180))
        console.log(Math.cos(45*Math.PI/180))
        console.log(Math.tan(45*Math.PI/180))

取区间的随机数

        //取区间的随机数
        //min max
        function fn(min,max){
            return Math.random()*(max-min)+min
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值