leta="sss";letb=newString("sss");console.log(a==b);//trueconsole.log(a===b);//falseconsole.log(typeofa);//stringconsole.log(typeofb);//object字符串的申明方式不一样,也会导致其成为不同的类型。 我的理解:在Java中string是引用类型,JS是弱类型语言,将字符串归于基本类型,却存在String这样的构造函数,这感觉很矛盾,但是不影响开发中的使用,因为,引用类型的字符串所存在的属性和方法,基本类型的也同样适用。
console.log(newString);constructor length prototype
常用的如下,不会都介绍。
conststr="asdfgh";//接受一个参数,默认传0,返回在指定位置的字符;console.log(str.charAt(2));//d//接受一个参数,默认传0,返回在指定的位置的字符的 Unicode 编码console.log(str.charCodeAt(2));//100连接两个或更多字符串,并返回新的字符串,通常用‘+’代替。
将 Unicode 编码转为字符
String.fromCharCode(100);//d这不是实例对象上的方法,在上面图片中的 ‘constructor’ 属性中可以看到它,所以,它是构造函数的一个方法。
conststr="asdfgh";//从左向右检索,返回字符串中首次出现的下标,没有则-1;console.log(str.indexOf('d'));//2//从右向左检索,返回字符串中首次出现的下标,没有则-1;console.log(str.lastIndexOf('d'));//6conststr="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"]在字符串中查找匹配的子串, 并替换与正则表达式匹配的子串
//可用空来替换,相当于删除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把字符串分割为字符串数组 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"]- 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不受影响;
去除首位空字符串
大小写切换
- 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 的字符串在来匹配)
- 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
将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"
因new String 含有[Symbol.iterator],则其默认被设置遍历器接口,可通过for...of..进行遍历;
