基本字符串和字符串对象的区别

  • 通过单引号或双引号定 和直接调用 String 方法(没有通过 new 生成字符串对象实例)的字符串都是基本字符串。
  • JavaScript会自动将基本字符串转换为字符串对象,只有将基本字符串转化为字符串对象之后才可以使用字符串对象的方法。
  • 当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候(基本字符串是没有这些方法的),JavaScript 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。
let fx = 'Fx is a great girl'
let fx1 = new String('Fx is a great girl')

console.log(typeof fx) // string
console.log(typeof fx1) // object

字符串的长度

console.log(fx.length) // 19

静态属性 String.length 返回 1。

console.log(String.length) // 1

String.fromCharCode(num1, ..., numN)

返回由指定的 UTF-16 代码单元序列创建的字符串

console.log(String.fromCharCode(65, 66, 67)) // ABC
console.log(String.fromCharCode(0x2014)) // —

charCodeAt()

返回0到65535之间的整数 表示给定索引处的 UTF-16 代码单元

console.log(fx.charCodeAt(0)) // 122(z)
console.log(fx.charCodeAt(1)) // 120(x)
console.log(fx.charCodeAt(1)) // 120(x)

charAt()

从一个字符串中返回指定的字符。

console.log(fx.charAt(0)) // Z
console.log(fx.charAt(fx.length-1)) // l

concat()

将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回。

console.log(fx.concat(' ', 'yes', '。')) // fx is a great girl yes。

endsWith(val, length)

用来判断当前字符串是否是以另外一个给定的子字符串结尾的,根据判断结果返回 true 或 false。length 可选参数(作为 str 的长度)

console.log(fx.endsWith('girl')) // true
console.log(fx.endsWith('girl', 10)) // false
console.log(fx.endsWith('g', 10)) // true

startsWith(searchString, position)

方法用来判断当前字符串是否以另外一个给定的子字符串开头,并根据判断结果返回 ​​true​​​ 或 ​​false​​​。这个方法区分大小写。
​​​searchString​​​:要搜索的子字符串。
​​​position​​​ 可选:在 ​​str​​​ 中搜索 ​​searchString​​ 的开始位置,默认值为 0,也就是真正的字符串开头处。

console.log(fx.startsWith('Fx')) // true
console.log(fx.startsWith('Fx', 1)) // false
console.log(fx.startsWith('xx', 1)) // true

includes(val, position)

用于判断一个字符串是否包含在另一个字符串中,根据情况返回 true 或 false。区分大小写,val 要在此字符串中搜索的字符串。position 可选。从当前字符串的哪个索引位置开始搜寻子字符串,默认值为0。

console.log(fx.includes('fx')) // false
console.log(fx.includes('Fx')) // true
console.log(fx.endsWith('Fx', 10)) // false

indexOf(val, fromIndex)

返回调用它的 String 对象中第一次出现的指定值的索引,从 fromIndex 处进行搜索。如果未找到该值,则返回 -1。表示开始查找的位置。可以是任意整数,默认值为 0。如果 fromIndex 小于 0,则查找整个字符串(等价于传入了 0)。如果 fromIndex 大于等于 str.length,则必返回 -1。

console.log(fx.indexOf('fx')) // -1
console.log(fx.indexOf('is')) // 4
console.log(fx.indexOf('')) // 0
console.log(fx.indexOf('', -1)) // 0
console.log(fx.indexOf('', 10)) // 10
console.log(fx.indexOf('', 30)) // 19
console.log(fx.indexOf('is', -1)) // 4
console.log(fx.indexOf('is', 3)) // 4
console.log(fx.indexOf('is', 10)) // -1
console.log(fx.indexOf('is', 30)) // -1

lastIndexOf(val, fromIndex)

返回调用String 对象的指定值最后一次出现的索引,在一个字符串中的指定位置 fromIndex处从后向前搜索。如果没找到这个特定值则返回-1 。从 str的第fromIndex位开始向左回向查找。fromIndex默认值是 +Infinity。如果 fromIndex >= str.length ,则会搜索整个字符串。如果 fromIndex < 0 ,则等同于 fromIndex == 0。

'canal'.lastIndexOf('a');     // returns 3 (没有指明fromIndex则从末尾l处开始反向检索到的第一个a出现在l的后面,即index为3的位置)
'canal'.lastIndexOf('a', 2); // returns 1(指明fromIndex为2则从n处反向向回检索到其后面就是a,即index为1的位置)
'canal'.lastIndexOf('a', 0); // returns -1(指明fromIndex为0则从c处向左回向检索a发现没有,故返回-1)
'canal'.lastIndexOf('x'); // returns -1
'canal'.lastIndexOf('c', -5); // returns 0(指明fromIndex为-5则视同0,从c处向左回向查找发现自己就是,故返回0)
'canal'.lastIndexOf('c', 0); // returns 0(指明fromIndex为0则从c处向左回向查找c发现自己就是,故返回自己的索引0)
'canal'.lastIndexOf(''); // returns 5
'canal'.lastIndexOf('', 2); // returns 2
'abab'.lastIndexOf('ab', 2) 将返回 2 而不是 0, 因为fromIndex只限制待匹配字符串的开头。

repeat(count)

构造并返回一个新字符串,该字符串包含被连接在一起的指定数量的字符串的副本。
参数(count):介于0和正无穷大之间的整数 : [0, +∞) 。表示在新构造的字符串中重复了多少遍原字符串。

console.log(fx.repeat(0)) // ""
console.log(fx.repeat(1)) // Fx is a great girl
console.log(fx.repeat(2)) // Fx is a great girlFx is a great girl
console.log(fx.repeat(2.2)) // Fx is a great girlFx is a great girl
console.log(fx.repeat(3.8)) // Fx is a great girlFx is a great girlFx is a great girl
console.log(fx.repeat(-1)) // Invalid count value

slice(beginIndex, endIndex)

  • 提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串。
  • ​beginIndex​​​:从该索引(以 0 为基数)处开始提取原字符串中的字符。如果值为负数,会被当做​​strLength + beginIndex​​​ 看待,这里的​​strLength​​​ 是字符串的长度(例如, 如果​​beginIndex​​​ 是 -3 则看作是:​​strLength - 3​​)
  • ​endIndex​​​:可选。在该索引(以 0 为基数)处结束提取字符串,不包含此位置。如果省略该参数,​​slice()​​ 会一直提取到字符串末尾。如果该参数为负数,则被看作是 strLength + endIndex,这里的 strLength 就是字符串的长度(例如,如果 endIndex 是 -3,则是, strLength - 3)。
console.log(fx.slice(0)) // Fx is a great girl
console.log(fx.slice(2)) // x is a great girl
console.log(fx.slice(2, 3)) // x
console.log(fx.slice(2, 5)) // x i
console.log(fx.slice(-1)) // l
console.log(fx.slice(-19)) // Fx is a great girl
console.log(fx.slice(-19, -1)) // Fx is a great gir

substring(indexStart, indexEnd)

  • 返回一个字符串在开始索引到结束索引之间的一个子集, 或从开始索引直到字符串的末尾的一个子集。
  • indexStart:需要截取的第一个字符的索引,该字符作为返回的字符串的首字母。
  • indexEnd:可选。一个 0 到字符串长度之间的整数,以该数字为索引的字符不包含在截取的字符串内。
  • 如果​​indexStart​​​ 等于​​indexEnd​​​,​​substring​​ 返回一个空字符串。
  • 如果省略​​indexEnd​​​,​​substring​​ 提取字符一直到字符串末尾。
  • 如果任一参数小于 0 或为NaN,则被当作 0。
  • 如果任一参数大于​​stringName.length​​​,则被当作​​stringName.length​​。
  • 如果​​indexStart​​​ 大于​​indexEnd​​​,则​​substring​​ 的执行效果就像两个参数调换了
console.log(fx.substring(0)) // Fx is a great girl
console.log(fx.substring(0, 2)) // Zx
console.log(fx.substring(0, -1)) // ""
console.log(fx.substring(2, -10)) // Zx
console.log(fx.substring(-1, -10)) // ""
console.log(fx.substring(1, 200)) // xx is a great girl
console.log(fx.substring(2, NaN)) // Zx
console.log(fx.substring(2, 2)) // ""

match(regexp)

  • 检索返回一个字符串匹配正则表达式的的结果。
  • regexp 一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp 。如果你没有给出任何参数并直接使用match() 方法 ,你将会得到一 个包含空字符串的 Array :[""] 。
  • 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性。

split(separator, limit)

  • 使用指定的分隔符字符串将一个String对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。
  • separator:​​指定表示每个拆分应发生的点的字符串。​​separator​​ 可以是一个字符串或正则表达式。 如果纯文本分隔符包含多个字符,则必须找到整个字符串来表示分割点。如果在str中省略或不出现分隔符,则返回的数组包含一个由整个字符串组成的元素。如果分隔符为空字符串,则将str原字符串中每个字符的数组形式返回。
  • limit:​一个整数,限定返回的分割片段数量。当提供此参数时,split 方法会在指定分隔符的每次出现时分割该字符串,但在限制条目已放入数组时停止。如果在达到指定限制之前达到字符串的末尾,它可能仍然包含少于限制的条目。新数组中不返回剩下的文本。

返回值:返回源字符串以分隔符出现位置分隔而成的一个Array

var myString = "Hello World. How are you doing?";
var splits = myString.split(" ", 3);

console.log(splits); // ["Hello", "World.", "How"]

padStart() 

  • 用另一个字符串填充当前字符串(重复,如果需要的话),以便产生的字符串达到给定的长度。填充从当前字符串的开始(左侧)应用的。
  • targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
  • padString:可选,填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。此参数的缺省值为 " "(U+0020)。
  • 返回值:在原字符串开头填充指定的填充字符串直到目标长度所形成的新字符串。
'abc'.padStart(10);         // "       abc"
'abc'.padStart(10, "foo"); // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0"); // "00000abc"
'abc'.padStart(1); // "abc"

padEnd()  

  • 用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的字符串。从当前字符串的末尾(右侧)开始填充。
  • targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
  • padString:可选,填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。此参数的缺省值为 " "(U+0020)。
  • 返回值:在原字符串末尾填充指定的填充字符串直到目标长度所形成的新字符串。
'abc'.padEnd(10);          // "abc       "
'abc'.padEnd(10, "foo"); // "abcfoofoof"
'abc'.padEnd(6, "123456"); // "abc123"
'abc'.padEnd(1); // "abc"

toString()

返回指定对象的字符串形式。

String 对象覆盖了Object 对象的 toString 方法;并没有继承 Object.toString()。对于 String 对象,toString 方法返回该对象的字符串形式,和 String.prototype.valueOf() 方法返回值一样。

var x = new String("Hello world");
alert(x.toString()) // 输出 "Hello world

trim()

会从一个字符串的两端删除空白字符。在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR)。

var orig = '   foo  '
console.log(orig.trim()) // 'foo'
// 另一个.trim()例子,只从一边删除
var orig = 'foo '
console.log(orig.trim()) // 'foo'

trimRight():​​方法从一个字符串的右端移除空白字符。

trimStart()​​​:​​​方法从字符串的开头删除空格。​​trimLeft()​​是此方法的别名。

toLocaleLowerCase()​​​:​​方法根据任何特定于语言环境的案例映射,返回调用字符串值转换为小写的值。

toLocaleUpperCase()​​​:​​ 使用本地化(locale-specific)的大小写映射规则将输入的字符串转化成大写形式并返回结果字符串。

toLowerCase():​​会将调用该方法的字符串值转为小写形式,并返回。

toUpperCase():​​ 将调用该方法的字符串值转换为大写形式,并返回。

toLocaleLowerCase()/toLocaleUpperCase() 方法返回调用该方法的字符串被转换成小写之后的值,转换规则根据任何本地化特定的大小写映射。toLocaleLowerCase()/toLocaleUpperCase() 并不会影响字符串自身的值。在大多数情况下,该方法产生的结果和调用 toLowerCase()/toUpperCase() 的结果相同,但是在某些本地环境中,比如土耳其语,它的大小写映射并不遵循在Unicode中的默认的大小写映射,因此会有一个不同的结果。