字符串

String类型

String类型是字符串的对象包装类型,可以使用String构造函数来创建。

var stringObject = new String('hello world')

String对象的方法可以在所有基本的字符串值中访问到。其中,继承的valueOf()、toLocaleString()和toString()方法,都返回对象所表示的基本字符串值。

字符串方法

  • 字符方法

    • charAt()
      var stringObj = 'hello world'
      stringOjb.charAt(1) // 'e'
      
    • charCodeAt()
      var stringObj = 'hello world'
      stringObj.charCodeAt(1) // 101
      
    • 方括号加数字索引
      var stringObj = 'hello world'
      stringObj[1] // 'e'
      
  • 字符串操作方法

    • concat() 拼接字符串,可以接受任意多个参数

      var stringValue = 'hello '
      var result = stringValue.contact('world', '!')
      result // 'hello world!'
      stringValue // 'hello '
      
    • slice(start, end)

      start:子字符串的开始位置

      end:子字符串最后一个字符后面的位置

      var stringValue = 'hello world'
      stringValue.slice(3) // 'lo world'
      stringValue.slice(3, 7) // 'lo w'
      

      slice()方法会将传入的负值与字符串的长度相加

      var stringValue = 'hello world'
      stringValue.slice(-3) // 'rld'
      stringValue.slice(3, -4) // 'lo w'
      
    • substr(start, length)

      start:子字符串的开始位置

      length:返回字符的个数

      var stringValue = 'hello world'
      stringValue.substr(3) // 'lo world'
      stringValue.substr(3, 7) // 'lo worl'
      

      substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0

      var stringValue = 'hello world'
      stringValue.substr(-3) // 'rld'
      stringValue.substr(3, -4) // ''
      
    • substring(start, end)

      start:子字符串的开始位置

      end:子字符串最后一个字符后面的位置

      var stringValue = 'hello world'
      stringValue.substring(3) // 'lo world'
      stringValue.substring(3, 7) // 'lo w'
      

      substring()方法会把所有负值参数都转换为0

      var stringValue = 'hello world'
      stringValue.substring(-3) // 'hello world'
      stringValue.substring(3, -4) // 'hel',相当于stringValue.substring(3, 0),由于这个方法会将较小的数作为开始位置,将较大的数作为结束位置,因此最终相当于调用了substring(0, 3)
      
  • 字符串位置方法

    • indexOf()

    • lastIndexOf()

      这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置(如果没有找到该子字符串,则返回-1),第二个参数表示从字符串中的哪个位置开始搜索。

      var stringValue = 'hello world'
      stringValue.indexOf('o') // 4
      stringValue.lastIndexOf('o') // 7
      
      stringValue.indexOf('o', 6) // 7
      stringValue.lastIndexOf('o', 6) // 4
      
      var stringValue = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit'
      var  positions = new Array()
      var pos = stringValue.indexOf('e')
      
      while(pos > -1) {
        positions.push(pos)
        pos = stringValue.indexOf('e', pos + 1)
      }
      positions // [3, 24, 32, 35, 52]
      
  • trim()方法

    创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。

    var stringValue = '  hello world    '
    var trimmedStringValue = stringValue.trim()
    stringValue // '  hello world    '
    trimmedStringValue // 'hello world'
    
  • 字符串大小写转换方法

    • toLowerCase()、toLocaleLowerCase()
    • toUpperCase()、toLocaleUpperCase()
  • 字符串的模式匹配方法

    • match()

      var text = 'cat, bat, sat, fat'
      var pattern = /.at/
      
      var matches = text.match(pattern)
      matches.index // 0
      matches[0] // 'cat'
      
    • search()

      var text = 'cat, bat, sat, fat'
      var pos = text.search(/at/)
      pos // 1
      
    • replace()

      var text = 'cat, bat, sat, fat'
      var result = text.replace('at', 'ond)
      result // 'cond, bat, sat, fat'
      
      result = text.replace(/at/g, 'ond)
      result // 'cond, bond, sond, fond'
      
    • split()

      var colorText = 'red, blue, green, yellow'
      var colors1 = colorText.split(',') // ['red', 'blue', 'green', 'yellow']
      var colors1 = colorText.split(',', 2) // ['red', 'blue']
      
  • localeCompare()方法

    比较两个字符串,并返回下列值中的一个:

    • 如果字符串在字母表中应该排在字符串参数之前,则返回一个负数
    • 如果字符串等于字符串参数,则返回0
    • 如果字符串在字母表中应该排在字符串参数之后,则返回一个正数
      var stringValue = 'yellow'
      stringValue.localeCompare('brick') // 1
      stringValue.localeCompare('yellow') // 0
      stringValue.localeCompare('zoo') // -1
      
  • fromCharCode()方法

    接收一或多个字符编码,然后将它们转换成一个字符串(不能识别大于0xFFFF的码点)。

    String.fromCharCode(104, 101, 108, 111) // 'hello'
    

字符串新增的方法

  • String.fromCodePoint()

    弥补String.fromCharCode()方法,可以识别大于0xFFFF的字符

    String.fromCodePoint(0x20BB7) // "𠮷"
    
    String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y' // true
    
  • String.raw()

    返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串

    String.raw`Hi\n${2+3}!`
    // 实际返回 'Hi\\n5!',显示的是转义后的结果 'Hi\n5!'
    
  • codePointAt()

    var s = '吉'
    s.length // 2
    s.charAt(0) // ''
    s.charAt(1) // ''
    s.charCodeAt(0) // 55362
    s.charCodeAt(1) // 57271
    
  • normalize()

    用来将字符的不同表示方法统一为同样的形式(Unicode正规化)

  • includes(),startsWith(),endsWith()

    • includes():返回布尔值,表示是否找到了参数字符串
    • startsWith():返回布尔值,表示参数字符串是否在原字符串的头部
    • endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
    let s = 'Hello world!'
    s.startsWith('Hello') // true
    s.endsWith('!') // true
    s.includes('0') // true
    

    这三个方法都支持第二个参数,表示开始搜索的位置

    let s = 'Hello world!'
    s.startsWith('world', 6)  // true
    s.endsWith('Hello', 5) // true
    s.includes('Hello', 6) // false
    

    使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。

  • repeat()

    返回一个新字符串,表示将原字符串重复n次,如果repeat的参数是字符串,则会先转换成数字。

    let s = 'x'
    s.repeat(3) // 'xxx'
    s.repeat(0) // ''
    
    s.repeat(Infinity) // RangeError: Invalid count value
    s.repeat(-1) // RangeError: Invalid count value
    
    
  • padStart(),padEnd()
    字符串补全长度。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。

    'xxx'.padStart(2, 'ab') // 'xxx'
    'xxx'.padEnd(2, 'ab') // 'xxx'
    
    'abc'.padStart(10, '0123456789') // '0123456abc'
    
    'x'.padStart(4) // '   x'
    'x'.padEnd(4) // 'x   '
    
    '12'.padStart(10, 'YYYY-MM-DD') // 'YYYY-MM-12'
    '09-12'.padStart(10, 'YYYY-MM-DD') // 'YYYY-09-12'
    
  • trimStart(),trimEnd()

    它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。

    const s = '  abc  '
    s.trim() // 'abc'
    s.trimStart() // 'abc  '
    s.trimEnd() // '  abc'
    

    trimLeft()是trimStart()的别名,trimRight()是trimEnd()的别名

  • matchAll()

    matchAll()方法返回一个正则表达式在当前字符串的所有匹配

posted @ 2020-04-26 20:32  lynnDu  阅读(95)  评论(0编辑  收藏  举报