Javascript不知為什麼,有時會缺少一些好用的函式
不過算了,既然是你需要的,總是能在網路上查到
今天介紹一個取得副檔名的函式,另外讓各位腦力當機一下。
不同的方法,會有不同的效率,一般那些很容易想出來,對電腦來說效率通常就...
而一位網友VisioN就創出了一個
有趣的方法,而且還附帶
比較。
filename.substr((~-filename.lastIndexOf(".") >>> 0) + 2);要知道的是,lastIndexOf在找不到東西的時候會回傳-1
而我們的目標應該是:無限大
話是這麼說,但他想到,其實只要數字盡可能的大,對多數情形來說就可以讓substr回傳空字串了。
他主要利用>>>這個運算子的特性:只要是位元位移後,數字會改為無號的方式表示。
-1,如果是用32-bit的長度,那就是32個1(二進制),但另一方面,這數字亦可當作4294967295
所以經過>>> 0運算後,就變成正數了。
而另一方面,原本是正數的,仍不會改變。
而對於其它有找到的來說,因為只要.後面的東西,所以其實是找到的位置的再後一個,也就是lastIndexOf的結果+1
所以簡單的方法就出來了
filename.substr((filename.lastIndexOf('.') >>> 0) + 1)這邊有個小問題,就是以.為開頭的檔案。
在linux系統下,這類檔案其實是隱藏檔,如果你預計要跨不同系統的話,這的確也該排除。
可能是為了避免溢位的問題,所以他不使用-1的方式,而是用~-
負號大家都知道,而~的效果就是讓所有的位元反轉,對人來說,這看起來就像是加了負號後再減1
而也因為前面我們讓數字少了1,所以最後的+1也要改成+2好讓結果正確。