string
参考
What's the point of new String(“x”) in JavaScript?
MDN String
声明字符串
1 2 3 4
| var word = 'hello';
var sen = `${word} world`; console.log(word, sen);
|
1 2
| var word = new String('hello') console.log(word)
|
1 2 3
| var fun = String('hello'); fun fun === "hello"
|
字面量和构造函数的区别
- string object(由new String创建)的typeof值为object.而string(由字面量方法创建)值为string
1 2 3 4 5 6 7
| var lit = 'hello'; typeof lit
var con= new String('hello'); typeof con
lit === con
|
因此,无法用typeof来判断一个变量是不是string object.作为代替,使用instanceof判断string object
1 2 3 4 5 6 7
| con instanceof String
lit instanceof String
typeof con === 'string' || con instanceof String typeof lit === 'string' || lit instanceof String
|
- 可以向string object添加属性,而string不行
1 2 3 4 5 6 7
| var con = new String('anna'); con.like = 'apple'; console.log(con.like)
var lit = 'anna'; lit.like = 'apple'; console.log(lit.like)
|
- String object可以被继承,string不行
1 2
| var conC = Object.create(con); var litC = Object.create(lit);
|
- 在相同判断(===)中,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
var conC = conA; conC === conA
var litA = 'anna'; var litB = String('anna'); litA === litB;
|
属性
调用属性时,js会自动将string转换为string object
length
返回字符串的长度
1 2 3 4 5 6 7
| var lit = 'hello'; lit.length
lit.length = 10; console.log(lit.length);
|
方法
所有涉及修改string内容的方法都返回新的字符串,不会改变原变量
charAt
返回字符串
string.charAt(index);
concat
连接多个字符串
string.concat(string1,string2,...)
1 2 3
| var cA = 'hello' var cB = 'world' cA.concat(' ', cB);
|
出于性能原因,建议使用加号(+)代替concat
还可以避免下列情况发生
1 2 3 4 5 6
| var c = 1;
c.concat('hello');
c + 'hello'
|
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');
c.includes('ello', 1);
c.includes('ello', 2);
c.includes('ello', 'abc'); c.includes('ello', {a:10});
|
indexOf
搜索字符串,返回第一个匹配字符串的指针位置.未找到时,返回-1
string.indexOf(searchString, startIndex)
1 2 3
| var c = 'hello'; c.indexOf('he'); c.indexOf('eee');
|
为了兼容IE,可以用indexOf代替includes
1 2 3 4
| var c = 'hello'; if(c.indexOf('he') !== -1) { console.log(true) }
|
search
类似indexOf,区别为search可以用正则表达式
1 2 3
| var c = 'hello'; c.search('he'); c.search(/[\w]/);
|
indexOf和search只返回首次匹配的指针位置
如果想获取多个匹配值,使用match方法代替
match
返回一个数组,内涵匹配到的字符.如果未匹配到任何字符,则返回null
string.match(regexp | string)
1 2 3 4
| var c = 'hello'; c.match(/[\w]/);
c.match(/[\w]/g);
|
replace
替换字符
string.replace(regexp | string, replaceString|function)
1 2 3 4
| 'hello'.replace(/^\w/,function(v){ return v.toUpperCase(); })
|
toUpperCase
转大写
toLowerCase
转小写
trim
不兼容ie8
删除字符串开头和结尾的空白字符(\n \t space tab)
1 2
| var c = ' hello\n' c.trim();
|
slice
分隔字符
string.slice(startIndex, endIndex)
1 2 3
| 'hello'.slice(1) 'hello'.slice(0,3) 'hello'.slice(0,-1)
|
split
把字符串转换成数组
string.split(RegExp|string)
1 2 3
| 'hello'.split() 'hello'.split('') 'hello'.split(/l/) ["he", "", "o"]
|
valueOf
返回string原始值 ,等于toString()
var con = new String('hello');
var lit = c.valueOf();
typeof con
typeof lit
``