1. string
    1. 参考
    2. 声明字符串
      1. 字面量和构造函数的区别
  2. 属性
    1. length
  3. 方法
    1. charAt
    2. concat
    3. includes
    4. indexOf
    5. search
    6. match
    7. replace
    8. toUpperCase
    9. toLowerCase
    10. trim
    11. slice
    12. split
    13. valueOf

JavaScript String

string

参考

What's the point of new String(“x”) in JavaScript?
MDN String

声明字符串

  • 字面量
1
2
3
4
var word = 'hello';
// 模板字符串(es6)
var sen = `${word} world`;
console.log(word, sen); // hello hello world
  • 构造函数
1
2
var word = new String('hello')
console.log(word) // String {"hello"}
  • 把String作为函数调用,和字面量声明效果相同
1
2
3
var fun = String('hello');
fun // "hello"
fun === "hello" // true

字面量和构造函数的区别

  • string object(由new String创建)的typeof值为object.而string(由字面量方法创建)值为string
1
2
3
4
5
6
7
var lit = 'hello';
typeof lit // "string"

var con= new String('hello');
typeof con // "object"

lit === con // false

因此,无法用typeof来判断一个变量是不是string object.作为代替,使用instanceof判断string object

1
2
3
4
5
6
7
con instanceof String // true
// instanceof判断 变量否是某个对象的实例.因此,字面量方法创建的lit返回false
lit instanceof String // false

// 可合用typeof和instanceof判断是否是字符串
typeof con === 'string' || con instanceof String // true
typeof lit === 'string' || lit instanceof String // true
  • 可以向string object添加属性,而string不行
1
2
3
4
5
6
7
var con = new String('anna');
con.like = 'apple';
console.log(con.like) // apple

var lit = 'anna';
lit.like = 'apple';
console.log(lit.like) // undefined
  • String object可以被继承,string不行
1
2
var conC = Object.create(con);
var litC = Object.create(lit); // TypeError
  • 在相同判断(===)中,string object只能等于自身,而string能等于和自己有相同值的任意string
1
2
3
4
5
6
7
8
9
10
var conA = new String('anna');
var conB = new String('anna');
conA === conB // false

var conC = conA;
conC === conA // true

var litA = 'anna';
var litB = String('anna');
litA === litB; // true

属性

调用属性时,js会自动将string转换为string object

length

返回字符串的长度

1
2
3
4
5
6
7
var lit = 'hello';
lit.length // 5

// 不可以像Array一样,通过改变length来增加/减少字符串长度
lit.length = 10;
console.log(lit.length); // 5

方法

所有涉及修改string内容的方法都返回新的字符串,不会改变原变量

charAt

返回字符串
string.charAt(index);

1
'hello'.charAt(0); // "h"

concat

连接多个字符串
string.concat(string1,string2,...)

1
2
3
var cA = 'hello'
var cB = 'world'
cA.concat(' ', cB); // "hello world"

出于性能原因,建议使用加号(+)代替concat
还可以避免下列情况发生

1
2
3
4
5
6
var c = 1;
// c是个数字,Number没有concat方法,因此会报错
c.concat('hello'); // TypeError

// 而加号就没事
c + 'hello' // "1hello"

includes

IE不支持
判断是否包含某个字符串
string.includes(searchString, startIndex)

  • startIndex 搜索开始位置(可选),可接受数字和数值型的字符串,例如1和"1"
1
2
3
4
5
6
7
8
9
10
var c = 'hello';
c.includes('ello'); // true

c.includes('ello', 1); // true
// 从2开始搜索('llo'),因此找不到
c.includes('ello', 2); // false

// 给startIndex传入其他值也不会报错,一律视为0(从头开始搜索)
c.includes('ello', 'abc'); // true
c.includes('ello', {a:10}); // true

indexOf

搜索字符串,返回第一个匹配字符串的指针位置.未找到时,返回-1
string.indexOf(searchString, startIndex)

1
2
3
var c = 'hello';
c.indexOf('he'); // 0
c.indexOf('eee'); // -1

为了兼容IE,可以用indexOf代替includes

1
2
3
4
var c = 'hello';
if(c.indexOf('he') !== -1) {
console.log(true)
}

类似indexOf,区别为search可以用正则表达式

1
2
3
var c = 'hello';
c.search('he'); // 0
c.search(/[\w]/); // 0

indexOf和search只返回首次匹配的指针位置
如果想获取多个匹配值,使用match方法代替

match

返回一个数组,内涵匹配到的字符.如果未匹配到任何字符,则返回null
string.match(regexp | string)

1
2
3
4
var c = 'hello';
c.match(/[\w]/); // ["h", index: 0, input: "hello"]
// 如果使用g标志,可以返回多个匹配值
c.match(/[\w]/g); //  ["h", "e", "l", "l", "o"]

replace

替换字符
string.replace(regexp | string, replaceString|function)

1
2
3
4
'hello'.replace(/^\w/,function(v){
return v.toUpperCase();
})
// "Hello"

toUpperCase

转大写

1
'hello'.toUpperCase() // "HELLO"

toLowerCase

转小写

1
'HELLO'.toLowerCase() // "hello"

trim

不兼容ie8
删除字符串开头和结尾的空白字符(\n \t space tab)

1
2
var c = ' hello\n'
c.trim(); // "hello"

slice

分隔字符
string.slice(startIndex, endIndex)

  • startIndex和endIndex支持负值
1
2
3
'hello'.slice(1) // "ello"
'hello'.slice(0,3) // "hel"
'hello'.slice(0,-1) // "hell"

split

把字符串转换成数组
string.split(RegExp|string)

1
2
3
'hello'.split() // ["hello"]
'hello'.split('') // ["h", "e", "l", "l", "o"]
'hello'.split(/l/) ["he", "", "o"]

valueOf

返回string原始值 ,等于toString()

// 可用valueOf把string object转换为string
var  con = new String('hello');
var lit = c.valueOf();

typeof con // "object"
typeof lit // "string"
``