国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

H5有坑,名字不可以亂叫

XGBCCC / 3412人閱讀

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

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é)果一樣了,這就是一個正則的問題
本來到這里就完了,可是小白還是很執(zhí)著的,為什么他寫的不行,他再次用正確的正則來測試,代碼貼出來如下:

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

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

怎么會還是不行,這次正則絕對沒錯了,都測試通過了

結(jié)果這次在控制臺測試,確實不通過,咦為什么?

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

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

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

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

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

而

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

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

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

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

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/82255.html

相關(guān)文章

  • H5頁面二次分享

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

    evin2016 評論0 收藏0
  • H5頁面二次分享

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

    layman 評論0 收藏0
  • h5 vue引入微信sdk 實現(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 評論0 收藏0

發(fā)表評論

0條評論

XGBCCC

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<