美文网首页
js 字符串常用方法

js 字符串常用方法

作者: 路上灵魂的自由者 | 来源:发表于2019-01-10 15:12 被阅读6次

    // js中关于字符串的一些细节知识

    // 在js中所用单引号或者双引号包起来的都是字符串,每一个字符串是由零到多个字符组成。

    var str = 'hahahahaha';

    // str.length -> 字符串长度

    str[0] //-> 'h'

    str[str.length-1] //=> 'n'

    str[100] //=>undefined

    // 字符常中的每一个字符串都有一个自己对应位置的索引,也有类似于数组一样的length代表自己的长度

    // 循环遍历输出每一项

    for(var i = 0,i<str.length;i++){

        console.log(str[i])

    }

    // 关于字符串中常用的方法

    字符串是基本数据类型,字符串的每一次操作都是值类型直接进行操作,不像数组一样是基于空间地址来操作的,所以不存在原有字符串是否改变这一说,肯定是不变的。

    ### "charAt/charCodeAt"

    作用:charAt根据索引获取指定位置的字符,charCodeAt不仅仅获取字符,他获取的是字符对应的Unicode编码值(ASC LL码值)

    参数: 索引

    返回:字符或者对应的编码

    ```

    var str = 'qwertyuiopasdfghjklzxcvbnm';

    str.charAt(100)  // => ''(空字符串)

    str[100]        // => undefined

    str.charCodeAt(0)// => 113

    String.fromCharCode(122)  // 'z'

    charCodeAt返回的字符串对应的编码

    String.fromCharCode返回的是编码对应的字符

    ```

    ### indexOf/lastIndexOf

    和数组的indexOf/lastIndexOf一样

    基于这两个方法,可以获取字符串在字符串中第一次或者最后一个出现的位置的索引,有这个字符,返回大于等于0的索引,不包含这个字符,返回的结果是-1。可以验证当前字符串是否包含某个字符。

    ```

    var str = 'qwertyuiopasdfghjklzxcvbnm';

    if(str.indexOf('@')>-1){

    //=》条件成立,说明包含字符串@符号

    }

    ```

    ### slice

    作用:str.slice(n,m) 从索引n开始找到索引m出(不包含m), 把找到的字符串当作新字符串返回

    ```

    var str = 'qwertyuiopasdfghjklzxcvbnm';

    str.slice(1,3)  //=>we

    ```

    ### substring (字符串截取)

    和slice语法一模一样,唯一的区别在于,slice支持负数索引。而substring不支持负数索引

    ```

    var str = 'qwertyuiopasdfghjklzxcvbnm';

    str.substring(1,3)  //=>we

    ```

    ### substr

    也是字符串截取的方法,用法是:str.substr(n,m) 从索引n开始截取m个字符

    ```

    var str = 'qwertyuiopasdfghjklzxcvbnm';

    str.substr(1,5)  //=>werty

    str.substr(-6,3) //=>xcv

    ```

    ### toUpperCase/toLowerCase

    实现字母大小写转换

    toUpperCase =》 小写转大写

    toLowerCase =》 大写转小写

    ```

    var str = 'QwertyuiopAsdfghjklZxcvbnm';

    str.toUpperCase() //"QWERTYUIOPASDFGHJKLZXCVBNM"

    str.toLowerCase()  //"qwertyuiopasdfghjklzxcvbnm"

    ```

    ### "split"

    和数组中的join相对应,数组中的join是把数组每一项按照指定的连续符变为字符串,而split是把字符串按照指定的分隔符,拆分成数组中的每一项

    ```

    var ary = [12,23,34];

    var str = ary.join("+")  // 12+23+34

    str.split("+")    // ["12","23","34"];

    ```

    ### "replace"

    作用:替换字符串中的原有字符

    参数:原有字符,要替换的新字符

    返回:替换后的字符

    ```

    把skl替换成”哈哈“

    var str = 'skl2018skl';

    str = str.replace("skl","哈哈");  //在使用正则的情况下,每执行一次啊replace只能替换一个

    ```

    看str原型方法(String.prototype)

    ### 真实项目中的需求

    ```

    1.时间字符串格式化

    》有一个时间字符串 "2019-1-10 11:46:8",我们项基于这个字符串获取到”04月04日 16日26分“

    ```

    /*

    1.基于SPLIT按照空格把字符串拆成两部分(数组的两项)

    2.左边这一部分继续以SPLIT按照杠来拆

    3.右边这一部分继续以SPLIT按照冒号来拆

    4.把需要的信息拼接在一起即可

    */

    var str = '2019-1-10 11:46:8';

    function addZero(val){

    return val < 10? '0'+val: val

    }

    var ary = str.split(' '),

    aryLeft = ary[0].split('-'), //=> ['2019','1','10']

    aryRight = ary[1].split(':'); //=> [11,46,8]

    var month = addZero(aryLeft[1]);

    var day = addZero(aryLeft[1]);

    var hours = addZero(aryRight[1]);

    var minutes = addZero(aryRight[1]);

    console.log(month+"月"+day+"日"+hours+"时"+minutes+"分")

    逼格高一点得

    ~function (pro){

        pro.formatTime = function (template){

            template = template || '{0}年{1}月{2}日 {3}时{4}分{5}秒';

            var ary = this.match(/\d+/g);

            template = template.replace(/\{(\d+)\}/g,function(){

            var n = arguments[1],

            val = ary[n] || '0';

            val < 10 ? val ='0'+val:null;

                return val

            })

        }

    }(String.prototype)

    ### URL地址问好传参解析

    > 有一个url地址"http://www.baidu.con/?lx=1&anme=AA&sex=man";地址问好后面的内容是我们需要解析出来的参数信息

    {

        lx:1,

        name: 'AA',

        sex: 'man'

    }

    /*

    * 1.先找到问号

    * 2.首先我们需要验证是否存在#哈希值,存在我们从问号开始截取到#,不存在我们直接截取到字符串末尾

    * 3.以&符进行拆分(数组)

    * 4.遍历数组中的每一项,把每一下再按照=进行拆分,把拆分后的第一项作为对象的属性名。第二项作为属性值进行存储

    */

    var str = 'http://www.baidu.con/?lx=1&anme=AA&sex=man#teacher'

    //=》#后面的称为哈希(HASH)值,这个值可能有可能没有,有的话我们截取的时候需要过滤掉

    function strXI(str){

        // 获取

        var indexASK = str.indexOf("?");

        var indexWELL = str.indexOf('#');

        var indexStr = '';

        if(indexWELL>-1){

            //=>存在#

            indexStr = str.substring(indexASK+1,indexWELL)

        }else{

            indexStr = str.substr(indexASK+1)

        }

        var ary = indexStr.split('&')

        var obj = {}

        for(var i=0;i<ary.length;i++){

            var item = ary[i];

            var itemAry = item.split('=');

            obj[itemAry[0]] = itemAry[1]

        }

        return obj

    }

    console.log(strXI(str))

    相关文章

      网友评论

          本文标题:js 字符串常用方法

          本文链接:https://www.haomeiwen.com/subject/vqjarqtx.html