摘要:如果上一步驟計(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; }方案二:使用String的split方法
function getFileExtension2(filename) { return filename.split(".").pop(); }
方案三:使用String的slice,lastIndexOf方法上述兩種方案無(wú)法覆蓋一些極端情況,下面這個(gè)更健壯
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的返回值分別是-1和0。然后無(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" | |
String的split | "" | "" |
"filename" | "filename" | |
"filename.txt" | "txt" | |
".hiddenfile" | "hiddenfile" | |
"filename.with.many.dots.ext" | "ext" | |
String的slice和lastIndexOf | "" | "" |
"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
摘要:概述本文為協(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é)可以見: ...
摘要:函數(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)建系列教...
摘要:并且這種格式?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ù),也可...
閱讀 2407·2021-10-14 09:43
閱讀 2440·2021-09-09 09:34
閱讀 1604·2019-08-30 12:57
閱讀 1207·2019-08-29 14:16
閱讀 723·2019-08-26 12:13
閱讀 3204·2019-08-26 11:45
閱讀 2288·2019-08-23 16:18
閱讀 2660·2019-08-23 15:27