一、match/exec
(1)match
位置
它是字符串的方法(String.prototype.match())
创建
var reg = new regExp(/\d/g); //或regExp(/\d/,'g')
var reg = /\d/g
返回值
数组
不加g,返回单个值的数组
加g,返回所有值的数组
var str = 'jdkahdasjdk912324dsf213';
console.log(str.match(/\d/g));
//["9", "1", "2", "3", "2", "4", "2", "1", "3"]
(2)exec
位置
它是正则的方法(regExp.prototype.exec())
返回值
类数组
不加g,返回单个值的数组
加了g,有记忆功能
var str = 'cat,bat,sat,fat';
var reg = /.at/;
var match = reg.exec(str);
console.log(match);
//["cat", index: 0, input: "cat,bat,sat,fat", groups: undefined]
var str = 'cat,bat,sat,fat';
var reg = /.at/g;
var match1 = reg.exec(str);
var match2 = reg.exec(str);
var match3 = reg.exec(str);
var match4 = reg.exec(str);
console.log(match1);
console.log(match2);
console.log(match3);
console.log(match4);
//["cat", index: 0, input: "cat,bat,sat,fat", groups: undefined]
//["bat", index: 4, input: "cat,bat,sat,fat", groups: undefined]
//["sat", index: 8, input: "cat,bat,sat,fat", groups: undefined]
//["fat", index: 12, input: "cat,bat,sat,fat", groups: undefined]
二、charAt/charCodeAt/fromCharCode
(1)charAt
语义
对应字符是什么
位置
String.prototype
调用
var str = 'abc';
console.log(str.charAt(0)); //a
(2)charCodeAt
语义
对应字符的字符编码是什么
位置
String.prototype
调用
var str = 'abc';
console.log(str.charCodeAt(0)); //97
(3)fromCharCode
语义
字符编码对应的字符
位置
String的静态方法
调用
console.log(String.fromCharCode(97)); //a
示例
生成26个字母
//写法一
for (var i = 0, res = ''; i < 26; i++) {
res += String.fromCharCode(65 + i);
}
console.log(res);
//ABCDEFGHIJKLMNOPQRSTUVWXYZ
//写法二
var res = new Array(60).fill('').reduce((prev, cur, index) => {
return prev + String.fromCharCode(65 + index);
}, '').match(/[a-zA-Z]/g).join('');
console.log(res);
//ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
三、toLocaleLowerCase/toLocaleUpperCase/toLowerCase/toUpperCase
(1)toLocaleLowerCase、toLocaleUpperCase
除了对英文进行大小写处理,还可以针对一些特殊的语言进行大小处理,例如拉丁语、土耳其语
(2)toLowerCase、toUpperCase
只能对英文进行大小写处理
四、数组/字符串的slice
(1)数组的slice
功能
截取字符串或数组
参数
两个参数:[startIndex, endIndex)、[startIndex, ∞)
没有参数拷贝当前字符串或数组
示例
var arr = [1, 2, 3, 4, 5];
console.log(arr.slice()); //[1, 2, 3, 4, 5]
console.log(arr.slice(1)); //[2, 3, 4, 5]
console.log(arr.slice(1, 3)); //[2, 3]
特殊值:
var arr = [1, 2, 3, 4, 5];
console.log(arr.slice(NaN)); //[1, 2, 3, 4, 5] 当0处理
console.log(arr.slice(null)); //[1, 2, 3, 4, 5] 当0处理
console.log(arr.slice(undefined)); //[1, 2, 3, 4, 5] 未传值处理
console.log(arr.slice([1])); //[2, 3, 4, 5]
console.log(arr.slice('1')); //[2, 3, 4, 5]
console.log(arr.slice(3, 1)); //[]
console.log(arr.slice(1, undefined)); //[2, 3, 4, 5]
console.log(arr.slice(-2)); //[4, 5] 支持负数
特点
- undefined是作为未传值来处理
- 隐式转换
- 无效参数0
- 不支持反序(3,1)
- 支持负数
(2)字符串的slice
功能
截取字符串或数组
参数
两个参数:[startIndex, endIndex)、[startIndex, ∞)
没有参数拷贝当前字符串或数组
示例
var str = '12345';
console.log(str.slice()); //12345
console.log(str.slice(1)); //2345
console.log(str.slice(1, 3)); //23
特殊值:
var str = '12345';
console.log(str.slice(NaN)); //12345 当0处理
console.log(str.slice(null)); //12345 当0处理
console.log(str.slice(undefined)); //12345 未传值处理
console.log(str.slice([1])); //2345
console.log(str.slice('1')); //2345
console.log(str.slice(3, 1)); //
console.log(str.slice(1, undefined)); //2345
console.log(str.slice(-2)); //45 支持负数
特点
- undefined是作为未传值来处理
- 隐式转换
- 无效参数0
- 不支持反序(3,1)
- 支持负数
五、substring/substr
(1)substring
功能
截取字符串
参数
两个参数:[startIndex, endIndex)、[startIndex, ∞)
示例
var str = '12345';
console.log(str.substring()); //12345
console.log(str.substring(1)); //2345
console.log(str.substring(1, 3)); //23
console.log(str.substring(NaN)); //12345 当0处理
console.log(str.substring(undefined)); //12345 未传值处理
console.log(str.substring(null)); //12345 当0处理
console.log(str.substring([1])); //2345
console.log(str.substring('1')); //2345
console.log(str.substring(3, 1)); //23 支持反序
console.log(str.substring(1, undefined)); //2345
console.log(str.substring(-2)); //12345 当0处理
特点
支持反序(3,1),不支持负数(-2)
(2)substr(不推荐)
功能
截取字符串
参数
两个参数:startIndex, 截取长度
示例
var str = '12345';
console.log(str.substr()); //12345
console.log(str.substr(1)); //2345
console.log(str.substr(1, 3)); //234
console.log(str.substr(NaN)); //12345 当0处理
console.log(str.substr(undefined)); //12345 未传值处理
console.log(str.substr(null)); //12345 当0处理
console.log(str.substr([1])); //2345
console.log(str.substr('1')); //2345
console.log(str.substr(3, 1)); //4
console.log(str.substr(1, undefined)); //2345 未传值处理
console.log(str.substr(-2)); //45 支持负数
特点
不存在反序(第二个参数是长度),支持负数(-2)
六、数组/字符串indexOf
(1)数组的indexOf
功能
返回元素所在数组的下标,不包含返回-1
参数
第一个参数是数组元素,第二个参数是从哪一位开始找
特殊值
var arr = [1, 2, 3, 4, 5, 2];
console.log(arr.indexOf(2)); //1
console.log(arr.indexOf(2, 3)); //5
console.log(arr.indexOf(2, -1)); //5 支持负数
console.log(arr.indexOf(2, null)); //1 当0处理
console.log(arr.indexOf(2, undefined)); //1 未传值处理
console.log(arr.indexOf(2, NaN)); //1 当0处理
console.log(arr.indexOf(2, '1')); //1
console.log(arr.indexOf(2, [1])); //1
console.log(arr.indexOf(2, true)); //1
(2)字符串的indexOf
功能
返回字符所在字符串的下标,不包含返回-1
参数
第一个参数是字符,第二个参数是从哪一位开始找
特殊值
var str = '123452';
console.log(str.indexOf(['2'])); //1
console.log(str.indexOf(2, 3)); //5
console.log(str.indexOf(2, -1)); //1 当0处理
console.log(str.indexOf(2, null)); //1 当0处理
console.log(str.indexOf(2, undefined)); //1 未传值处理
console.log(str.indexOf(2, NaN)); //1 当0处理
console.log(str.indexOf(2, '1')); //1
console.log(str.indexOf(2, [1])); //1
console.log(str.indexOf(2, true)); //1
特点
不支持负数
六、数组/字符串lastIndexOf
(1)数组的lastIndexOf
功能
从后往前找,其它和indexOf一样
特殊值
var arr = [1, 2, 3, 4, 5, 2];
console.log(arr.lastIndexOf(2)); //5
console.log(arr.lastIndexOf(2, 3)); //1
console.log(arr.lastIndexOf(2, -1)); //5 支持负数
console.log(arr.lastIndexOf(2, null)); //-1
console.log(arr.lastIndexOf(2, undefined)); //-1 当作0处理
console.log(arr.lastIndexOf(2, NaN)); //-1
console.log(arr.lastIndexOf(2, '1')); //1
console.log(arr.lastIndexOf(2, [1])); //1
console.log(arr.lastIndexOf(2, true)); //1
(2)字符串的lastIndexOf
功能
从后往前找,其它和indexOf一样
特殊值
var str = '123452';
console.log(str.lastIndexOf(2)); //5
console.log(str.lastIndexOf(2, 3)); //1
console.log(str.lastIndexOf(2, -1)); //-1 不支持负数0
console.log(str.lastIndexOf(2, null)); //-1
console.log(str.lastIndexOf(2, undefined)); //5 length-1
console.log(str.lastIndexOf(2, NaN)); //5 特例length-1处理
console.log(str.lastIndexOf(2, '1')); //1
console.log(str.lastIndexOf(2, [1])); //1
console.log(str.lastIndexOf(2, true)); //1
大坑
- 数组lastIndexOf的undefined当作0处理
- 字符串lastIndexOf的undefined当length-1处理
- 数组/字符串lastIndexOf的NaN当length-1处理
七、小结
-
每个参数都会根据所需要的数据类型作出相应的隐式转换
-
undefined如果是数组方法的参数,那么就按未传值处理,如果是字符串方法的参数,那么就会当0处理
-
字符串都不支持负数,除了substr(它是个怪胎)
八、toString
(1)myTypeof封装
var commonTools = {
myTypeOf: function (val) {
var type = val;
var resSet = {
"[object Object]": 'object',
"[object Array]": 'array',
"[object Number]": 'obj_number',
"[object String]": 'obj_string',
"[object Boolean]": 'obj_boolean',
"[object Date]": 'date',
"[object RegExp]": 'regexp'
}
if (val === null) {
return null;
} else if (type === 'object') {
var res = Object.prototype.toString.call(val);
return resSet[res];
} else {
return type
}
}
}