Skip to content

Latest commit

History

History
187 lines (187 loc) · 7.49 KB

File metadata and controls

187 lines (187 loc) · 7.49 KB

String

1、字符串是对象吗?

leta="sss";letb=newString("sss");console.log(a==b);//trueconsole.log(a===b);//falseconsole.log(typeofa);//stringconsole.log(typeofb);//object

字符串的申明方式不一样,也会导致其成为不同的类型。 我的理解:在Java中string是引用类型,JS是弱类型语言,将字符串归于基本类型,却存在String这样的构造函数,这感觉很矛盾,但是不影响开发中的使用,因为,引用类型的字符串所存在的属性和方法,基本类型的也同样适用。

2、字符串的属性和方法

console.log(newString);

结果如图: string 可以清楚的看到string的属性和方法。

2.1、属性

constructor length prototype

2.2、方法

常用的如下,不会都介绍。

2.2.1 charAt()、charCodeAt()
conststr="asdfgh";//接受一个参数,默认传0,返回在指定位置的字符;console.log(str.charAt(2));//d//接受一个参数,默认传0,返回在指定的位置的字符的 Unicode 编码console.log(str.charCodeAt(2));//100
2.2.2 concat()

连接两个或更多字符串,并返回新的字符串,通常用‘+’代替。

2.2.3 fromCharCode()

将 Unicode 编码转为字符

String.fromCharCode(100);//d

这不是实例对象上的方法,在上面图片中的 ‘constructor’ 属性中可以看到它,所以,它是构造函数的一个方法。

2.2.4 indexOf()、lastIndexOf()
conststr="asdfgh";//从左向右检索,返回字符串中首次出现的下标,没有则-1;console.log(str.indexOf('d'));//2//从右向左检索,返回字符串中首次出现的下标,没有则-1;console.log(str.lastIndexOf('d'));//6
2.2.5 search()、match()
conststr="abluesddddfblueghd";// search()//从左向右检索,返回字符串中首次出现符合匹配规则(可以传入正则规则)的下标,没有则-1;//类似indexOf(),区别是一个可以匹配正则console.log(str.search('d'));// 6console.log(str.search('D'));// -1console.log(str.search(/blue/i));// 1 //match()//从左向右检索,返回字符串中符合匹配规则(可以传入正则规则)的数组,没有则null;//可以返回一个或是多个,都是数组varstr='gagdfgadfgdg';var_str1=str.match(/.gd/);//匹配一个var_str2=str.match(/.gd/g);//全局匹配多个console.log(_str1);//["agd", index: 1, input: "gagdfgadfgdg", groups: undefined]console.log(_str2);// ["agd", "fgd"]
2.2.6 replace()

在字符串中查找匹配的子串, 并替换与正则表达式匹配的子串

//可用空来替换,相当于删除conststr='abc33abcabcabcab33cabc';const_str1=str.replace(/33/g,'');console.log(_str1);//abcabcabcabcabcabc//全局替换conststr='abc33abcabcabcab33cabc';const_str1=str.replace(/33/g,'444');console.log(_str1);//abc444abcabcabcab444cabc//局部替换conststr='abc33abcabcabcab33cabc';const_str1=str.replace(/33/,'444');console.log(_str1);//abc444abcabcabcab33cabc//用下标替换conststr='abc33abcabcabcab33cabc';const_str1=str.replace(3,'444');console.log(_str1);//abc4443abcabcabcab33cabc
2.2.7 split(value,n)

把字符串分割为字符串数组 vlaue:分割的元素,可为空字符串 n:数值,控制最终返回值数组的长度最大值。

conststr='abc33ab33cabc';const_str0=str.split("");const_str1=str.split("33");const_str2=str.split("33",2);console.log(_str0);// ["a", "b", "c", "3", "3", "a", "b", "3", "3", "c", "a", "b", "c"]console.log(_str1);// ["abc", "ab", "cabc"]console.log(_str2);// ["abc", "ab"]
2.2.8 slice()、substr()、substring()
  • slice(startIndex.endIndex) 传入开始和结束的下标,截取中间需要的字符串 startIndex必传 可以为负数,即倒数,最后一位即为-1; endIndex选传 不传则默认到最后一位 截取时不包括该位置,可以为负数,即倒数,最后一位即为-1;
conststr='abcd';const_str1=str.slice(1);const_str2=str.slice(1,2);const_str3=str.slice(1,-1);console.log(_str1);//bcdconsole.log(_str2);//cconsole.log(_str3);//bc
  • substr(startIndex,length) 传入开始和所需的长度,截取中间需要的字符串 startIndex必传 可以为负数,即倒数,最后一位即为-1; length选传 截取的长度
conststr='abcd';const_str1=str.substr(1);const_str2=str.substr(1,2);console.log(_str1);//bcdconsole.log(_str2);//bc
  • substring(startIndex,endIndex) 传入开始和结束的下标,截取中间需要的字符串,和slice相似 startIndex必传 不可为负数,若为负数,则为0 endIndex选传 不可为负数,若为负数,则为0
conststr='abcd';const_str1=str.substring(1,2);const_str2=str.slice(-1,-2);const_str3=str.slice(0,0);console.log(_str1);//bconsole.log(_str2);// =>空字符串console.log(_str3);// =>空字符串
  • 三者区别 1、第2个参数。slice,substring中表示字符串的结束位置,substr中表示长度。 2、参数可否为负数。slice两个参数都可以为负数,substr只有第一个参数可以为负数,substring两个参数都为非负数 3、第1个参数大于第2个参数时:slice则返回空字符串;substring交换参数位置,继续截取;substr不受影响;
2.2.9 trim()

去除首位空字符串

2.2.10 toLowerCase()、toUpperCase()

大小写切换

3、ES6对字符串的扩展

3.1 includs()、startsWith(str,index)、endsWith(str,index)
  • includs(str,index) 返回布尔值,原字符串是否含有str,有则true,无false;可代替indexOf()来判断是否含有某字符串 str:需要匹配的字符串 index:开始匹配的位置(相当于截取 index~尾部 的字符串在来匹配)
  • startsWith(str,index) 返回布尔值,原字符串是否是str开头,有则true,无false; str:需要匹配的字符串 index:开始匹配的位置(相当于截取 index~尾部 的字符串在来匹配)
  • endsWith(str,index) 返回布尔值,原字符串是否是str结尾,有则true,无false; str:需要匹配的字符串 index:开始匹配的位置(相当于截取 0~index 的字符串在来匹配)
3.2 repeat()
  • str.repeat(n) 将str循环n遍,得到新字符串; n >-1&&n != Infinity;否则报错;其中大于0的小数统统向下取整;
console.log('a'.repeat(5));//aa
console.log('a'.repeat(5.6));//aa
console.log('a'.repeat(-0.5)); // =>向上取整为0
3.3 string.padStart(length, str)、string.padEnd(length, str)

将string用str不全到length的长度; 若str过长,可删除适当str,再补进string; string长度超多length,则string不变 一个从头补padStart(),一个从尾补padEnd(); 弄清楚谁补谁!!!参数补到调用者里

console.log('xyz'.padStart(6,'abc'));//abcxyz
console.log('xyz'.padEnd(5,'abc'));//xyzab
console.log('xyzxyz'.padStart(5,'abc'));//xyzxyz
//适用场景
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
3.4 字符串的遍历器接口

因new String 含有[Symbol.iterator],则其默认被设置遍历器接口,可通过for...of..进行遍历;

参考

ECMAScript 6 入门-字符串的扩展