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

資訊專欄INFORMATION COLUMN

[譯]如何更有效的獲取文件擴(kuò)展名

wthee / 358人閱讀

摘要:如果上一步驟計(jì)算出的起始下標(biāo)大于原始字符串長(zhǎng)度,則返回比較方案參數(shù)結(jié)果正則表達(dá)式的的和在線演示和性能上述代碼的線上實(shí)例上述三個(gè)方案的性能測(cè)試源碼里如果獲取文件擴(kuò)展名原文地址

問(wèn):如何獲取文件擴(kuò)展名?
var file1 = "50.xsl";
var file2 = "30.doc";
getFileExtension(file1); //xsl
getFileExtension(file2); //doc

function getFileExtension(filename) {
  /*TODO*/
}
方案一:正則表達(dá)式
function getFileExtension1(filename) {
    return (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename)[0] : undefined;
}
方案二:使用Stringsplit方法
function getFileExtension2(filename) {
    return filename.split(".").pop();
}

上述兩種方案無(wú)法覆蓋一些極端情況,下面這個(gè)更健壯

方案三:使用StringslicelastIndexOf方法
function getFileExtension3(filename) {
    return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2);
}

console.log(getFileExtension3(""));                            // ""
console.log(getFileExtension3("filename"));                    // ""
console.log(getFileExtension3("filename.txt"));                // "txt"   
console.log(getFileExtension3(".hiddenfile"));                 // ""
console.log(getFileExtension3("filename.with.many.dots.ext")); // "ext"

這貨怎么工作的?

String.lastIndexOf返回指定值的最后出現(xiàn)位置(本例里是:.)。如果返回-1,表示沒找到該指定值

當(dāng)參數(shù)是filename.hiddenfile時(shí),lastIndexOf的返回值分別是-10。然后無(wú)符號(hào)移位操作符將-2轉(zhuǎn)成了4294967294-1轉(zhuǎn)成了4294967295,這個(gè)小技巧保證了極端狀況下取值也不會(huì)異常

然后String.prototype.slice就以上面的計(jì)算結(jié)果作為起始下標(biāo)從原始字符串中提取出了正確的文件擴(kuò)展名。如果上一步驟計(jì)算出的起始下標(biāo)大于原始字符串長(zhǎng)度,則返回""

比較
方案 參數(shù) 結(jié)果
正則表達(dá)式 "" undefined
"filename" undefined
"filename.txt" "txt"
".hiddenfile" "hiddenfile"
"filename.with.many.dots.ext" "ext"
Stringsplit "" ""
"filename" "filename"
"filename.txt" "txt"
".hiddenfile" "hiddenfile"
"filename.with.many.dots.ext" "ext"
StringslicelastIndexOf "" ""
"filename" ""
"filename.txt" "txt"
".hiddenfile" ""
"filename.with.many.dots.ext" "ext"
在線演示和性能

上述代碼的線上實(shí)例
上述三個(gè)方案的性能測(cè)試

源碼

JavaScript里如果獲取文件擴(kuò)展名

原文地址:How to get the file extension more efficiently

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

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

相關(guān)文章

  • 】WebSocket協(xié)議第五章——數(shù)據(jù)幀(Data Framing)

    摘要:概述本文為協(xié)議的第五章,本文翻譯的主要內(nèi)容為傳輸?shù)臄?shù)據(jù)相關(guān)內(nèi)容。注意無(wú)論協(xié)議是否使用了,幀都需要添加掩碼。服務(wù)端收到?jīng)]有添加掩碼的數(shù)據(jù)幀以后,必須立即關(guān)閉連接。服務(wù)端禁止在發(fā)送數(shù)據(jù)幀給客戶端時(shí)添加掩碼?;A(chǔ)數(shù)據(jù)幀協(xié)議通過(guò)進(jìn)行了正式的定義。 概述 本文為WebSocket協(xié)議的第五章,本文翻譯的主要內(nèi)容為WebSocket傳輸?shù)臄?shù)據(jù)相關(guān)內(nèi)容。 有興趣了解該文檔之前幾張內(nèi)容的同學(xué)可以見: ...

    nevermind 評(píng)論0 收藏0
  • []Mixin 函數(shù)

    摘要:函數(shù)通常是面向?qū)ο缶幊田L(fēng)格,具有副作用。因?yàn)樵诤瘮?shù)式編程中,很有可能這些引用指向的并不是同一個(gè)對(duì)象。記住,函數(shù)并不意味著函數(shù)式編程。函數(shù)可以用函數(shù)式編程風(fēng)格編寫,避免副作用并不修改參數(shù),但這并不保證。 軟件構(gòu)建系列 原文鏈接:Functional Mixins 譯者注:在編程中,mixin 類似于一個(gè)固有名詞,可以理解為混合或混入,通常不進(jìn)行直譯,本文也是同樣。 這是軟件構(gòu)建系列教...

    zxhaaa 評(píng)論0 收藏0
  • [] 存儲(chǔ)和處理時(shí)間序列數(shù)據(jù)(“Time Series Databases”第三章)

    摘要:并且這種格式?jīng)]有事先對(duì)時(shí)間序列的數(shù)量做任何限制。使用格式來(lái)存儲(chǔ)時(shí)間序列數(shù)據(jù)的兩種可能的。其中存放了時(shí)間列序列列和數(shù)值列三列。隨著數(shù)據(jù)規(guī)模的繼續(xù)增長(zhǎng),基于的應(yīng)用程序越來(lái)越不適合處理這樣規(guī)模的時(shí)間序列數(shù)據(jù)了。 就像我們?cè)谇耙徽绿岬降?,一個(gè)時(shí)間序列是一系列數(shù)值,每個(gè)數(shù)值都伴隨著一個(gè)時(shí)間值,代表數(shù)據(jù)被記錄時(shí)的時(shí)間。時(shí)間序列數(shù)據(jù)存入后就很少再需要修改了,查詢時(shí)經(jīng)常是查詢一個(gè)連續(xù)時(shí)間段的數(shù)據(jù),也可...

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

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

0條評(píng)論

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