1、基本数据类型和引用数据类型
ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。
基本数据类型:Number、String、Boolen、Undefined、Null、Symbol、Bigint。
引用数据类型:也就是对象类型Object type,比如:对象(Object)、数组(Array)、函数(Function)、日期(Date)、正则表达式(RegExp)。
so正则表达式属于引用数据类型。
2、项目中在循环中使用正则
使用正则匹配111
const regular = /111/g; // 匹配111
console.log(regular.test('111')); // true 匹配成功
console.log(regular.test('111,111')); // true 匹配成功
循环中使用正则的异常写法
const regular = /111/g; // 匹配111
const list = [
'111',
'111',
'111,111',
'111,111',
'111',
'111',
'111,111',
'111,111',
'111',
'111',
'111,111',
'111,111',
];
list.forEach((element, index) => {
// 异常写法
console.log('log_________' + regular.test(element));
});
打印还存在false。
原因:/111/g 这种写法看起来像string,但终究还是正则,正则属于引用型数据类型。引用型数据类型 传统意义中 需要我们”深拷贝“或者开辟新内存 new Object() 才能使其 内存指向独立出来,而不是让内存指向一直指向初始定义时的源头。
循环中使用正则的正确写法
const regular = /111/g; // 匹配111
const list = [
'111',
'111',
'111,111',
'111,111',
'111',
'111',
'111,111',
'111,111',
'111',
'111',
'111,111',
'111,111',
];
list.forEach((element, index) => {
// 正确写法 new RegExp的内存指向在循环过程中每次都单独开辟一个新的“对象”,不会和前几次的循环regular.test(xxx)改变结果而混淆
// console.log('log_________' + /111/g.test(element)); // 这样写当然也行
console.log('log_________' + new RegExp(regular).test(element));
});
打印OK。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net