拯救生命的 JavaScript 单行程序(续篇)

JavaScript之禅

共 2193字,需浏览 5分钟

 ·

2021-12-19 15:45

☝点击上方蓝字关注我们,过早的优化是罪恶之源。🧑‍💻

在上一篇文章,我展示 17 个用于 DOM、数组、对象操作的 JavaScript 单行程序。在本文中,我将继续介绍一些用于字符串、日期处理以及其他一些有用的单行程序。

查看上一篇文章:17 个拯救生命的 JavaScript 单行程序

1、检查路径是不是相对路径

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) 来判断是不是绝对路径

2、将字符串的首字母小写

const lowercaseFirst = (str) => `${str.charAt(0).toLowerCase()}${str.slice(1)}`;
// Example
lowercaseFirst('Hello World'); // 'hello World'

3、 检查字符串是否为十六进制颜色

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、给一个时间添加"am/pm"后缀

// `h` 是小时,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、计算两个日期之间的间隔天数

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 中运行

const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;

8、检查代码是否在浏览器中运行

const isBrowser = typeof window === 'object' && typeof document === 'object';

9、将 URL 参数转换为对象

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、检测暗黑模式

const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;

11、复制到剪贴板

const copyToClipboard = (text) => navigator.clipboard.writeText(text);
// 示例
copyToClipboard("Hello World");

12、将 RGB 转换为十六进制

const rgbToHex = (r, g, b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1) ;
// 示例
rgbToHex(051255); // #0033ff

13、生成随机十六进制颜色

const randomColor = () => `#${Math.random().toString(16).slice(28).padEnd(6'0')}`;
// 或者
const randomColor = () => `#${(~~(Math.random() * (1 << 24))).toString(16)}`;

14、生成随机 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 加密模块生成随机字符串

const randomStr = () => require('crypto').randomBytes(32).toString('hex');
本文完。

亲爱的读者,

感谢你的时间。我们下期再见!

如果你在评论区留下的想法,我会十分高兴。

往期精彩回顾:

成为现代 JavaScript 大师的 3 个小技巧
17 个拯救生命的 JavaScript 单行程序
移动端浏览器常用的 meta 标签汇总
8个必知的 SEO 优化重要元标签
Javascript 数组及其方法详解

关注公众号回复【资源】可免费领取学习资料!



左手代码右手砖,抛砖引玉

记得点赞,分享,在看加关注哟


浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报