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。