看別的博客有用eval執行正則表達式的寫法,
1 //替換指定傳入參數的值,paramName為參數,replaceWith為新值 2 function replaceParamVal(paramName,replaceWith) { 3 var oUrl = this.location.href.toString(); 4 var re=eval('/('+ paramName+'=)([^&]*)/gi'); 5 var nUrl = oUrl.replace(re,paramName+'='+replaceWith); 6 this.location = nUrl; 7 }
會提示eval can be harmful
然后有文章又給出eval的替代方案:
1 //計算表達式的值 2 function evil(fn) { 3 var Fn = Function; //一個變量指向Function,防止有些前端編譯工具報錯 4 return new Fn('return ' + fn)(); 5 }
其實從一開始就走偏了,eval這種寫法應該摒棄,而且用evil替代方案這種奇淫巧計不在關鍵時候更是不要用,可以把直接量語法改寫為RegExp對象語法
優化后最終可使用版本如下:
1 // 替換指定傳入參數的值,oUrl為鏈接,paramName為參數,replaceWith為新值 2 function replaceParamVal (oUrl, paramName, replaceWith) { 3 var re = new RegExp('(' + paramName + '=)([^&]*)', 'gi') 4 var nUrl = oUrl.replace(re, paramName + '=' + replaceWith) 5 console.log('replaceParamVal:' + nUrl) 6 return nUrl 7 }