成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

H5有坑,名字不可以亂叫

XGBCCC / 3457人閱讀

問題來自一位叫小白的同事的疑問,問題如下:

var str = "[img_/storage/uploads/2016/1465955105.2148.jpg]";
str = str.replace(/[img_(S*)]/g,"");

或者

var str = "[img_/storage/uploads/2016/1465955105.2148.jpg]";
var name = new RegExp("[img_(S*)]","g");
str = str.replace(name,"");

正則大神現(xiàn)身,這兩種寫法有什么區(qū)別?為什么結(jié)果不同?

無論怎么試都有問題,首先上面的正則有點(diǎn)問題,我們調(diào)整一下:

var str = "[img_/storage/uploads/2016/1465955105.2148.jpg]";
var aa = /[img_(S*)]/g;
var bb = new RegExp("[img_(S*)]","g");
var cc = "";

//方法1
str.replace(aa, cc);

//方法2
str.replace(bb, cc);

結(jié)果一樣了,這就是一個(gè)正則的問題
本來到這里就完了,可是小白還是很執(zhí)著的,為什么他寫的不行,他再次用正確的正則來測(cè)試,代碼貼出來如下:

顯然他之前也測(cè)試過,只是用 replace 來做驗(yàn)證的,我測(cè)試也不通,就測(cè)試 new RegExp得出的結(jié)果是否一樣了,不知不覺,改了變量名來測(cè)試了,重復(fù)的東西別我提取,專門測(cè)試不一樣的地方,反而避免了這個(gè) name 變量名的問題

var str = "[img_/storage/uploads/2016/1465955105.2148.jpg]";
var name = new RegExp("[img_(S*)]","g");
str = str.replace(name,"");

怎么會(huì)還是不行,這次正則絕對(duì)沒錯(cuò)了,都測(cè)試通過了

結(jié)果這次在控制臺(tái)測(cè)試,確實(shí)不通過,咦為什么?

小白得出個(gè)暫時(shí)的結(jié)論:var 正則,不能用 name 來命名

這就奇怪了,哪有這樣的道理,你以為你是誰啊,你又不是關(guān)鍵字、保留字,還不讓作為變量用了,憑什么不讓命名?還限制正則不讓用?

沒有這樣的道理,這時(shí)我才注意到 name 這個(gè)名字的特別處,我有個(gè)印象,name 是作為 window 的一個(gè)屬性在使用,作為當(dāng)前窗口(tab 頁)的名稱,即使網(wǎng)站都跳轉(zhuǎn)走了,只要當(dāng)前窗口沒變,那么 name 值一直存在,不跟 url 相關(guān),這可以用來為跨域來用

這里難道有問題,于是專一測(cè)試 name 這個(gè)特殊變量:

var name = new RegExp("[img_(S*)]","g");
//輸出 name
//"/[img_(S*)]/g"

而

var bb = new RegExp("[img_(S*)]","g");
//輸出 bb
//[img_(S*)]/g

在控制臺(tái)下調(diào)試,不細(xì)看就錯(cuò)過去了,差了分號(hào),上面的結(jié)果實(shí)際變成字符串了

奇怪啊,正則不行,變量類型都變了,我試試其他數(shù)據(jù)類型,

也是不行,但在閉包里可以了,這是 name 這個(gè)值作為特定屬性,被限制為“強(qiáng)數(shù)據(jù)類型”了,js 中一直沒有此概念,普通變量,我想什么類型就什么類型,賦值就可以了,這里一個(gè)大坑,真是不可料想,變量類型不可變(自動(dòng)轉(zhuǎn)為 String 類型)

還有其他變量是這樣的么,呵呵,這根本沒法預(yù)料,這個(gè)瀏覽器用這個(gè)名字,鬼知道那么多瀏覽器,誰會(huì)不會(huì)偶爾又用了一個(gè)變量名字呢,他又有什么限制呢?。?!

舊事重提,一直說盡量避免使用全局變量,今天又上了一課,如果不遵守,終會(huì)摔跟頭,而且死都不知道怎么死的,另外變量名稱真的不是隨便用的,良好的命名規(guī)范,能避免出現(xiàn)這種情況,和非意義的變量名aa, bb相比,name明顯有具體指代,指某名稱,作為一個(gè)正則表達(dá)式的值來用,確有不合理之處,名字不可以隨便叫啊。不過也正因?yàn)槿绱?,發(fā)現(xiàn)這個(gè)變量名原來還有這種限制。

我們當(dāng)前的開發(fā),幾乎不存在使用全局變量的情況了,全都使用閉包封裝了,能避免變量被污染(或者出現(xiàn)上面變量類型被限制的情況),但個(gè)別情況,簡單頁面,還是存在不適用閉包把自己的變量全部包裝的情況,這是很可能出問題

所以只要能用閉包包裝,盡量把自己的邏輯包裝起來,免得再出現(xiàn)類似的詭異問題

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/82255.html

相關(guān)文章

  • H5頁面二次分享

    摘要:對(duì)于頁面來說二次分享還是蠻重要的,畢竟還是微信發(fā)出去之后習(xí)慣性的使用自帶的分享功能。通篇看完的話,基本上能避過很多坑記得微信文檔習(xí)慣把一些坑寫在后面,不放在一起先說說,怎么微信怎么做二次分享文檔地址,通過引入官方。 對(duì)于H5頁面來說二次分享還是蠻重要的,畢竟qq還是微信發(fā)出去之后習(xí)慣性的使用自帶的分享功能。和PC端不同,PC直接復(fù)制地址了。前兩天在做請(qǐng)柬,踩了不少的雷,個(gè)人開發(fā)和公司開...

    evin2016 評(píng)論0 收藏0
  • H5頁面二次分享

    摘要:對(duì)于頁面來說二次分享還是蠻重要的,畢竟還是微信發(fā)出去之后習(xí)慣性的使用自帶的分享功能。通篇看完的話,基本上能避過很多坑記得微信文檔習(xí)慣把一些坑寫在后面,不放在一起先說說,怎么微信怎么做二次分享文檔地址,通過引入官方。 對(duì)于H5頁面來說二次分享還是蠻重要的,畢竟qq還是微信發(fā)出去之后習(xí)慣性的使用自帶的分享功能。和PC端不同,PC直接復(fù)制地址了。前兩天在做請(qǐng)柬,踩了不少的雷,個(gè)人開發(fā)和公司開...

    layman 評(píng)論0 收藏0
  • h5 vue引入微信sdk 實(shí)現(xiàn)分享朋友圈,分享給朋友,獲取地理位置

    最近入職的公司主要做微信端的h5,所以在所難免要引用sdk。雖然官方文檔寫的還算清楚,但是還是有坑。 1.在index.html中 引入微信sdk 2.在assets/js 下新建文件 wx.js export default { wxShowMenu: function (that,sign=) { let url = window.location.href.split(#)[...

    tomorrowwu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<