RegExp-3 【match/exec、toString/valueOf、封装typeof】

一、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] 支持负数

特点

  1. undefined是作为未传值来处理
  2. 隐式转换
  3. 无效参数0
  4. 不支持反序(3,1)
  5. 支持负数

(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 支持负数  

特点

  1. undefined是作为未传值来处理
  2. 隐式转换
  3. 无效参数0
  4. 不支持反序(3,1)
  5. 支持负数

五、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 

大坑

  1. 数组lastIndexOf的undefined当作0处理
  2. 字符串lastIndexOf的undefined当length-1处理
  3. 数组/字符串lastIndexOf的NaN当length-1处理

七、小结

  1. 每个参数都会根据所需要的数据类型作出相应的隐式转换

  2. undefined如果是数组方法的参数,那么就按未传值处理,如果是字符串方法的参数,那么就会当0处理

  3. 字符串都不支持负数,除了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
        }
    }
}

九、备注

(1)数组常用方法

在这里插入图片描述

(2)字符串废弃的属性

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值