拯救生命的 JavaScript 單行程序(續(xù)篇)
?點(diǎn)擊上方藍(lán)字關(guān)注我們,過(guò)早的優(yōu)化是罪惡之源。?????

在上一篇文章,我展示 17 個(gè)用于 DOM、數(shù)組、對(duì)象操作的 JavaScript 單行程序。在本文中,我將繼續(xù)介紹一些用于字符串、日期處理以及其他一些有用的單行程序。
查看上一篇文章:17 個(gè)拯救生命的 JavaScript 單行程序
1、檢查路徑是不是相對(duì)路徑
const?isRelative?=?(path)?=>?!/^([a-z]+:)?[\\/]/i.test(path);
//?Examples
isRelative('/foo/bar/baz');?//?false
isRelative('C:\\foo\\bar\\baz');?//?false
isRelative('foo/bar/baz.txt');?//?true
isRelative('foo.md');?//?true
在 nodejs 中你也可以用 path.isAbsolute(path) 來(lái)判斷是不是絕對(duì)路徑
2、將字符串的首字母小寫(xiě)
const?lowercaseFirst?=?(str)?=>?`${str.charAt(0).toLowerCase()}${str.slice(1)}`;
//?Example
lowercaseFirst('Hello?World');?//?'hello?World'
3、 檢查字符串是否為十六進(jìn)制顏色
const?isHexColor?=?(color)?=>?/^#([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i.test(color);
//?Examples
isHexColor('#012');?//?true
isHexColor('#A1B2C3');?//?true
isHexColor('012');?//?false
isHexColor('#GHIJKL');?//?false
4、給一個(gè)時(shí)間添加"am/pm"后綴
//?`h`?是小時(shí),0?- 23
const?suffixAmPm?=?(h)?=>?`${h?%?12?===?0???12?:?h?%?12}${h?12???'am'?:?'pm'}`;
//?Examples
suffixAmPm(0);?//?'12am'
suffixAmPm(5);?//?'5am'
suffixAmPm(12);?//?'12pm'
suffixAmPm(15);?//?'3pm'
suffixAmPm(23);?//?'11pm'
5、計(jì)算兩個(gè)日期之間的間隔天數(shù)
const?diffDays?=?(date,?otherDate)?=>?Math.ceil(Math.abs(date?-?otherDate)?/?(1000?*?60?*?60?*?24));
//?Example
diffDays(new?Date('2014-12-19'),?new?Date('2020-01-01'));?//?1839
6、檢查日期是否有效
const?isDateValid?=?(...val)?=>?!Number.isNaN(new?Date(...val).valueOf());
isDateValid("December?17,?1995?03:24:00");?//?true
7、檢查代碼是否在 Node.js 中運(yùn)行
const?isNode?=?typeof?process?!==?'undefined'?&&?process.versions?!=?null?&&?process.versions.node?!=?null;
8、檢查代碼是否在瀏覽器中運(yùn)行
const?isBrowser?=?typeof?window?===?'object'?&&?typeof?document?===?'object';
9、將 URL 參數(shù)轉(zhuǎn)換為對(duì)象
const?getUrlParams?=?query?=>
??Array.from(new?URLSearchParams(query)).reduce(
????(p,?[k,?v])?=>?({
??????...p,
??????[k]:?p[k]???(Array.isArray(p[k])???p[k]?:?[p[k]]).concat(v)?:?v,
????}),
????{},
??);
//?Examples
getUrlParams(location.search);
getUrlParams('foo=Foo&bar=Bar');?//?{?foo:?"Foo",?bar:?"Bar"?}
//?Duplicate?key
getUrlParams('foo=Foo&foo=Fuzz&bar=Bar');?//?{?foo:?["Foo",?"Fuzz"],?bar:?"Bar"?}
10、檢測(cè)暗黑模式
const?isDarkMode?=?window.matchMedia?&&?window.matchMedia('(prefers-color-scheme:?dark)').matches;
11、復(fù)制到剪貼板
const?copyToClipboard?=?(text)?=>?navigator.clipboard.writeText(text);
//?示例
copyToClipboard("Hello?World");
12、將 RGB 轉(zhuǎn)換為十六進(jìn)制
const?rgbToHex?=?(r,?g,?b)?=>?"#"?+?((1?<24)?+?(r?<16)?+?(g?<8)?+?b).toString(16).slice(1)?;
//?示例
rgbToHex(0,?51,?255);?//?#0033ff
13、生成隨機(jī)十六進(jìn)制顏色
const?randomColor?=?()?=>?`#${Math.random().toString(16).slice(2,?8).padEnd(6,?'0')}`;
//?或者
const?randomColor?=?()?=>?`#${(~~(Math.random()?*?(1?<24))).toString(16)}`;
14、生成隨機(jī) IP 地址
const?randomIp?=?()?=>?Array(4).fill(0)
??.map((_,?i)?=>?Math.floor(Math.random()?*?255)?+?(i?===?0???1?:?0)?)
??.join('.');
//?示例
randomIp();?//?175.89.174.131
15、使用 Node 加密模塊生成隨機(jī)字符串
const?randomStr?=?()?=>?require('crypto').randomBytes(32).toString('hex');本文完。?親愛(ài)的讀者,
感謝你的時(shí)間。我們下期再見(jiàn)!
如果你在評(píng)論區(qū)留下的想法,我會(huì)十分高興。
?
往期精彩回顧:
關(guān)注公眾號(hào)回復(fù)【資源】可免費(fèi)領(lǐng)取學(xué)習(xí)資料!
左手代碼右手磚,拋磚引玉
記得點(diǎn)贊,分享,在看加關(guān)注喲
評(píng)論
圖片
表情
