# 二.数据分类[String]

# 1.转换

  • 转换为字符串:+'' 拼接也可以转换为 string
String(null) // "nul
String(undefined) // "undefined"
11 += ""; // "11" 字符串
1
2
3

# 2.方法

# 2.1 获取指定字符

for (var i = 0; i < str.length; i++) {
  console.log(str.chartAt(i))
}
for (var i = 0; i < str.length; i++) {
  console.log(str.charCodetAt(i)) // charCodeAt(索引)获取指定索引位置的字符对应的 ASCII 值
}
1
2
3
4
5
6

# 2.2 字符串的截取

//substr(n,m),从索引 n 开始截取 m 个字符
//substring(n,m)从索引 n 开发,找到索引 m 处(不包含 m),将找到的字符串返回
//slice(n,m)从索引 n 开始,找到索引 m 处(不包含 m),将找到的字符串返回 slice 支持负数作为索引,str.length+负数索引
//slice(n)没有 m 代表截取到末尾
1
2
3
4

# 2.3 位置查找

  • indexOf(字符)获取指定字符在字符串中第一次出现的索引位置
  • lastIndexOf(字符):y 获取指定字符在字符串中最后一次出现索引的位置,如果没有这个字符,返回-1,可以判断字符串中是否包含某个字符
string.indexOf("h")
string.lastIndexOf("h")
1
2

# 2.4 大小写转换

  • toLowerCase:将所有字符转换为小写
  • toUpperCase:将所有字符转换为大写

# 2.5 匹配替换

  • replace(要替换的老字符,替换成新字符):在不使用正则的情况下每一次调用方法只能替换一次
string.replace("老的", "新的")
string.replace(/老的/g, "新的")
1
2

# 2.6 拆分为数组

//splice
var s = "1+2+3+4+5"
console.log(s.split("+"))
console.log(s.split(""))
console.log(s.split(" "))
1
2
3
4
5

# 2.7 匹配替换

var time = "2018-02-03 12:03:09" //2018 年 02 月 03 日 12 时 03 分 09 秒
1
  • 思路一

    function zero(value) {
      return value < 10 ? "0" + value : value
    }
    function formatTime(timeStr) {
      var ary = timeStr.split(" ")
      var str1 = ary[0]
      var str2 = ary[1]
      var ary1 = str1.split("-")
      var ary2 = str2.split(":")
      return (
        ary1[0] +
        "年" +
        ary1[1] +
        "月" +
        ary1[2] +
        "日" +
        ary2[0] +
        "时" +
        ary2[1] +
        "分" +
        ary2[2] +
        "秒"
      )
    }
    console.log(formatTime(time))
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
  • 思路二:直接用 replace 一个个替换(没办法补充 0)

  • 思路三:用正则

# 3.类型判断

  • 对于原始类型来说,直接用 instanceof 来判断类型是不行的,我们可以改造
class PrimitiveString {
  static [Symbol.hasInstance](x) {
    return typeof x === "string"
  }
}
console.log("hhhh" instanceof PrimitiveString)
1
2
3
4
5
6

你可能不知道 Symbol.hasInstance 是什么东西,其实就是一个能 让我们自定义 instanceof 行为的东西,以上代码等同于 typeof 'hhh' === 'string',所以结果自然是 true 了

var num = parseFloat("px12.5") //->num=NaN
if (num == 12.5) {
  //->NaN==12.5
  console.log(12.5)
} else if (num == NaN) {
  //->NaN==NaN
  console.log(NaN)
} else if (typeof num === "number") {
  //typeof NaN="number" ->"number"==="number"
  console.log("number")
} else {
  console.log("no")
}
1
2
3
4
5
6
7
8
9
10
11
12
13