首页 文章详情

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

JavaScript之禅 | 228 2021-12-19 15:45 0 0 0
UniSMS (合一短信)

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

在上一篇文章,我展示 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 数组及其方法详解

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



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

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


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter