創作內容

5 GP

這數學真神奇

作者:likwueron│2018-04-01 17:34:41│巴幣:10│人氣:183
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好讓結果正確。
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3940315
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:javascript|位元運算

留言共 1 篇留言

Sticky Fingers
神奇海螺

04-01 17:50

likwueron
記得好像哪一本課本上面就是海螺04-01 17:55
我要留言提醒:您尚未登入,請先登入再留言

5喜歡★iqandadie 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:無線中繼... 後一篇:因為CK2現在免費,所以...

追蹤私訊切換新版閱覽

作品資料夾

dhreekingdon幸運看見的你
給你一顆紅心~讓你能保有一整天的好心情~祝你有個愉快的一天喲(<ゝω・)~❤看更多我要大聲說昨天22:55


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】