let a = "sss";
let b = new String("sss");
console.log(a==b);//true
console.log(a===b);//false
console.log(typeof a); //string
console.log(typeof b);//object
字符串的申明方式不一样,也会导致其成为不同的类型。 我的理解:在Java中string是引用类型,JS是弱类型语言,将字符串归于基本类型,却存在String这样的构造函数,这感觉很矛盾,但是不影响开发中的使用,因为,引用类型的字符串所存在的属性和方法,基本类型的也同样适用。
console.log(new String);
constructor length prototype
常用的如下,不会都介绍。
const str = "asdfgh";
//接受一个参数,默认传0,返回在指定位置的字符;
console.log(str.charAt(2));//d
//接受一个参数,默认传0,返回在指定的位置的字符的 Unicode 编码
console.log(str.charCodeAt(2));//100
连接两个或更多字符串,并返回新的字符串,通常用‘+’代替。
将 Unicode 编码转为字符
String.fromCharCode(100);//d
这不是实例对象上的方法,在上面图片中的 ‘constructor’ 属性中可以看到它,所以,它是构造函数的一个方法。
const str = "asdfgh";
//从左向右检索,返回字符串中首次出现的下标,没有则-1;
console.log(str.indexOf('d'));//2
//从右向左检索,返回字符串中首次出现的下标,没有则-1;
console.log(str.lastIndexOf('d'));//6
const str = "abluesddddfblueghd";
// search()
//从左向右检索,返回字符串中首次出现符合匹配规则(可以传入正则规则)的下标,没有则-1;
//类似indexOf(),区别是一个可以匹配正则
console.log(str.search('d'));// 6
console.log(str.search('D'));// -1
console.log(str.search(/blue/i));// 1
//match()
//从左向右检索,返回字符串中符合匹配规则(可以传入正则规则)的数组,没有则null;
//可以返回一个或是多个,都是数组
var str = '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"]
在字符串中查找匹配的子串, 并替换与正则表达式匹配的子串
//可用空来替换,相当于删除
const str = 'abc33abcabcabcab33cabc';
const _str1 = str.replace(/33/g,'');
console.log(_str1); //abcabcabcabcabcabc
//全局替换
const str = 'abc33abcabcabcab33cabc';
const _str1 = str.replace(/33/g,'444');
console.log(_str1); //abc444abcabcabcab444cabc
//局部替换
const str = 'abc33abcabcabcab33cabc';
const _str1 = str.replace(/33/,'444');
console.log(_str1); //abc444abcabcabcab33cabc
//用下标替换
const str = 'abc33abcabcabcab33cabc';
const _str1 = str.replace(3,'444');
console.log(_str1); //abc4443abcabcabcab33cabc
把字符串分割为字符串数组 vlaue:分割的元素,可为空字符串 n:数值,控制最终返回值数组的长度最大值。
const str = '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;
const str = 'abcd';
const _str1 = str.slice(1);
const _str2 = str.slice(1,2);
const _str3 = str.slice(1,-1);
console.log(_str1);//bcd
console.log(_str2);//c
console.log(_str3);//bc
- substr(startIndex,length) 传入开始和所需的长度,截取中间需要的字符串 startIndex必传 可以为负数,即倒数,最后一位即为-1; length选传 截取的长度
const str = 'abcd';
const _str1 = str.substr(1);
const _str2 = str.substr(1,2);
console.log(_str1);//bcd
console.log(_str2);//bc
- substring(startIndex,endIndex) 传入开始和结束的下标,截取中间需要的字符串,和slice相似 startIndex必传 不可为负数,若为负数,则为0 endIndex选传 不可为负数,若为负数,则为0
const str = 'abcd';
const _str1 = str.substring(1,2);
const _str2 = str.slice(-1,-2);
const _str3 = str.slice(0,0);
console.log(_str1);//b
console.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..进行遍历;