新人学习JS的日记。
欢迎各位朋友纠错!
以下内容都在谷歌浏览器进行测试可用
>>语法
//基本字符串
let str = 'string'; // string
str = "string"; // string
//字符串对象 不建议主动使用
let objStr = new String('string'); // String {0: "s", 1: "t", 2: "r", 3: "i", 4: "n", 5: "g", length: 6, [[PrimitiveValue]]: "string"}
objStr = Object('string'); // String {0: "s", 1: "t", 2: "r", 3: "i", 4: "n", 5: "g", length: 6, [[PrimitiveValue]]: "string"}
>>属性
str.length // 返回字符串的长度 6
str.__proto__ // 字符串的原型对象
String.prototype
1: 原型是一个 ""空字符串 的封装对象
测试: Object.prototype.toString.call(String.prototype) // "[object String]"
2: ES5规定该值不可变. 严格模式下会报错.
>>方法
(1) 获取指定字符串
(字符串的下标,和数组一样,从0开始)
>> str.charAt( index ) //返回指定位置的字符
1: 返回字符串index索引位置的字符,默认index为0。若index不在正常范围,则返回""空字符串。
>> str[index] //返回指定位置的字符
1: 返回字符串index索引位置的字符。若index不在正常范围,则返回undefined。
>> str.substr( start [, length] ) //返回截取后的字符串
1: start:从此索引位置开始获取字符串。 length:要获取的长度(个数)。
2: 若不写length参数,则从start开始获取字符串到str末尾。
3: 若start为<正数>,且大于str.length,返回""空字符串。
4: 若start为<负数>,则按照 str.length + start 的位置开始。若 Math.abs(start) > str.length 则使用 0 开始获取。
5: 若length为<0,负数>。返回一个""空字符串。大于str.length,则从start开始获取到str末尾。
6: 若start为NaN,则返回整个字符串,若length为NaN,则返回""空字符串。
>> str.substring(start[, end]) //返回截取后的字符串
1: start:从此索引位置开始获取字符串。 end:到此索引位置结束获取(此位置的字符不会获取到)。
2: 若不写end,则从start开获取字符串到str末尾。
3: 若start == end 则返回""空字符串
4: 两个参数中,传入<负数>和NaN都被当做0处理。 值大于str.length都当做length的大小处理
5: 若start大于length, 则相当于将两个参数互换例如: str.substring(1, 0) == str.substring(0, 1)。
>> str.slice(start [, end] ) //返回截取后的字符串
1: start:从此索引位置开始获取字符串。 end:到此索引位置结束获取(此位置的字符不会获取到)。
2: 若不写end,则从start开获取字符串到str末尾。
3: 若start == end 则返回""空字符串
4: 两个参数中,传入NaN都被当做0处理。 值大于str.length都当做length的大小处理
5: 两个参数中,传入<负数>都会变为 str.length+参数 后的结果。
>> str.repeat(count) //返回重复次数后的字符串
1: count表示要重复多少次
2: count若为:Infinity,负数 则报错
>> str.toUpperCase() //返回大写后的字符串
1: 对中文没效果
>> str.toLowerCase() //返回小写后的字符串
1: 对中文没效果
>> str.trim() //返回去掉两端空白字符的字符串
1:在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR)。
>> str.concat(string2, string3[, ..., stringN]) //连接两个字符串文本,并返回一个新的字符串。
1: string参数和原字符串连接的多个字符串
2: 强烈建议使用(+, +=)代替 concat方法,性能不如+ ,+=好
(2) 查找字符
>> str.indexOf(val[ ,start ]) //返回指定字符串在str第一次查找到的索引
1: val:要被查找的字符串。 start:开始查找的位置,默认为0。
2: <查找规则> : 从start开始 以 <从左往右 → >的方式查找。
3: val若是""空字符串,如果start < str.length 返回 start. 如果 start >= str.length 返回str.length
4: start若是负数,如同传入了0。
5: 返回指定值的第一次出现的索引; 如果没有找到 -1。
>> str.lastIndexOf(val[, start]) //返回指定字符串在str第一次查找到的索引
1: 规则基本同indexOf,区别如下。
2: <查找规则> : 从start开始 以 <从右往左 ← >的方式查找。
>> str.includes( val[, start] ) //判断一个字符串(val)是否包含在另一个字符串(str)中
1: val:要被查找的字符串。 start:开始查找的位置,默认为0。
2: start若是负数,如同传入了0。
3: val若是""空字符串,永远返回true。
4: 包含返回true,不包含返回false。
>> str.startsWith(val [, start]); //判断字符串是否以子字符串(val)开头的
1: val:要被查找的字符串。 start:开始查找的位置,默认为0。
2: var为""空字符串,永远返回true。
3: 若val在str中的索引值 === start 则返回true。否则返回false。
4: start默认的情况,就是在查找<开头>是不是val。
>> str.endsWith(val[, start]) //判断字符串是否以子字符串(val)结尾的
1: val:要被查找的字符串。 start:开始查找的位置,默认为str.length。
2: var为""空字符串,永远返回true。
3: 若val在str中的索引值+val.length === start 则返回true。否则返回false。
4: start默认的情况,就是在查找<末尾>是不是val。
(3) RegExp有关(分割,替换,查找)
>> str.split([val[, num]]) //分割一个字符串,返回数组
1: val:指定用来分割字符串的字符(串).可以是<字符串>或<正则对象>
2: val 为 ""空字符串,返回每个字符单独一项的数组.
3: num:返回 分割数组的 前num项. 默认返回整个数组.
4: 不写参数,返回 [str]。相当于将str push到空数组
>> str.replace( val, newStr|function ) //替换指定字符串
1: val:一个<正则对象>或者<其字面量>。该正则所匹配的内容会被第二个参数的返回值替换掉.
2: newStr 用于替换的字符串(可以插入特殊的变量名,参考3)。
3: $$ 插入一个 "$"。
$& 插入匹配的子串。
$` 插入当前匹配的子串左边的内容。
$' 插入当前匹配的子串右边的内容。
$n 假如第一个参数是正则对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串.
4: function用该函数的返回值替换第一个参数匹配到的结果。
函数的自动传入的参数 (匹配到的子字符串 [,p1 ,p2], 子字符串索引值, 原字符串);
[p1,p2] 是假如replace()方法的第一个参数是一个正则对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)
>> str.search(regexp) //返回正则首次匹配到的索引
1: regexp:正则对象. 若传入非正则,会隐式new RegExp(regexp) 转换为正则对象。
2: 返回首次匹配的索引,匹配失败,返回-1。
>> str.match(regexp) //用正则去匹配字符串.
1: regexp:正则对象. 若传入非正则,会隐式new RegExp(regexp) 转换为正则对象。
2: 匹配成功返回一个数组.
3: 数组第一项是匹配的结果,其余项是分组捕获项. 未提供参数返回[""]
4: 数组两个属性: index:第一次匹配的索引, input:原本字符串
5: 没有匹配到返回null
(4) Unicode相关
>> str.charCodeAt(index) //返回索引位置的Unicode 编码
1: index参数传入一个大于等于 0,小于字符串长度的整数。如果不是一个数值,则默认为 0。
2: index索引超出范围,则返回 NaN
3: 4字节字符无法正常处理 例如 :0x20BB7 "𠮷"字
>> str.charCodeAt(index) //返回索引位置的Unicode 编码
1: index参数传入一个大于等于 0,小于字符串长度的整数。如果不是一个数值,则默认为 0。
2: index索引超出范围,则返回 Undefined
3: 正常处理4字节字符
>> String.fromCharCode(num1, ..., numN) //返回Unicode对应的字符组成的字符串
1: num写Unicode 编码
2: 无法对4字节的字符使用例如 :0x20BB7 "𠮷"字
3: 如果传入无效的 Unicode 编码则报错
>> String.fromCodePoint(num1[, ...[, numN]]) //返回Unicode对应的字符组成的字符串
1: num写Unicode 编码
2: 正常处理4字节字符例如 :0x20BB7 "𠮷"字
3: 如果传入无效的 Unicode 编码则报错
(5) 模板字符串
>>语法
`dsa${代码块}` (反引号,在esc下面);
在``写的会直接转换为字符串, ${}里面可以写代码会被JS正常解析,并且将结果值执行String(值)
`string${2*6}` // "string12"
>> 带标签的模板字符串(调用函数) 例如:
function test(strArr, ...valArr){
console.log(strArr) // ["a", "b", "c", "d", raw: Array(4)]
console.log(valArr) //[1, 2, Array(2)]
return 'test'
}
var s = test`a${1}b${2}c${[1,2]}d` //不能写括号
console.log(s) // "test"
函数的第一个参数: 相当于将原本模板字符串以${}分割,将分割后的项 放入数组,在传入函数
函数的第二个参数: 模板字符串的代码块的值挨个传入函数,这里用ES6 ...(解构赋值)将值收集到数组中.
函数返回什么都可以.(当做正常函数对待就好了). 只不过是<模板字符串>调用的时候 不要加括号就行
以上是我所知的的东西,有任何错误,请在评论指出!
O(∩_∩)O谢谢你的观看~