19 个解决常见 JavaScript 问题的实用 ES6 代码段

简介: 在我们的开发人员工作流程中,我们经常遇到可能只需要几行代码即可解决的具有挑战性的问题。在本文中,我尝试编写一些有用的代码片段,这些代码片段可以在处理 URL、DOM、事件、日期、用户偏好等时为你提供帮助。

在我们的开发人员工作流程中,我们经常遇到可能只需要几行代码即可解决的具有挑战性的问题。在本文中,我尝试编写一些有用的代码片段,这些代码片段可以在处理 URL、DOM、事件、日期、用户偏好等时为你提供帮助。
所有的片段都是我从 30 秒的代码(https://www.30secondsofcode.org/js/p/1)中精心挑选出来的,这是一个很棒的资源网站,我强烈建议你去看看学习更多的东西。
整理学习这些的主要标准就是它的实用性,希望你能从中找到一些有价值的东西,可以应用到你未来的代码库中。
1. 如何获取基础 URL?
const getBaseURL = url => url.replace(/[?#].*$/, '');

getBaseURL('http://url.com/page?name=Adam&surname=Smith');
// 'http://url.com/page'

2. 如何判断网址是否为绝对网址?

const isAbsoluteURL = str => /^a-z*:/.test(str);

isAbsoluteURL('https://google.com'); // true
isAbsoluteURL('ftp://www.myserver.net'); // true
isAbsoluteURL('/foo/bar'); // false

3. 如何获取URL参数作为对象?

const getURLParameters = url =>
(url.match(/(1+)(=(2*))/g) || []).reduce(

(a, v) => (
  (a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a
),
{}

);

getURLParameters('google.com'); // {}
getURLParameters('http://url.com/page?name=Adam&surname=Smith');
// {name: 'Adam', surname: 'Smith'}

4.如何检查元素是否包含另一个元素?

const elementContains = (parent, child) =>
parent !== child && parent.contains(child);

elementContains(
document.querySelector('head'),
document.querySelector('title')
);
// true
elementContains(document.querySelector('body'), document.querySelector('body'));
// false

5.如何获取元素的所有祖先?

const getAncestors = el => {
let ancestors = [];
while (el) {

ancestors.unshift(el);
el = el.parentNode;

}
return ancestors;
};

getAncestors(document.querySelector('nav'));
// [document, html, body, header, nav]

6. 如何平滑滚动元素进入视图?

const smoothScroll = element =>
document.querySelector(element).scrollIntoView({

behavior: 'smooth'

});

smoothScroll('#fooBar'); // scrolls smoothly to the element with the id fooBar
smoothScroll('.fooBar');
// scrolls smoothly to the first element with a class of fooBar

7.如何处理元素外的点击?

const onClickOutside = (element, callback) => {
document.addEventListener('click', e => {

if (!element.contains(e.target)) callback();

});
};

onClickOutside('#my-element', () => console.log('Hello'));
// Will log 'Hello' whenever the user clicks outside of #my-element

8.如何生成UUID?

const UUIDGeneratorBrowser = () =>
([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>

(
  c ^
  (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
).toString(16)

);

UUIDGeneratorBrowser(); // '7982fcfe-5721-4632-bede-6000885be57d'

9. 如何获取选中的文本?

const getSelectedText = () => window.getSelection().toString();

getSelectedText(); // 'Lorem ipsum'

10. 如何将文本复制到剪贴板?

const copyToClipboard = str => {
if (navigator && navigator.clipboard && navigator.clipboard.writeText)

return navigator.clipboard.writeText(str);

return Promise.reject('The Clipboard API is not available.');
};

11. 如何给 HTML 元素添加样式?

const addStyles = (el, styles) => Object.assign(el.style, styles);

addStyles(document.getElementById('my-element'), {
background: 'red',
color: '#ffff00',
fontSize: '3rem'
});

12.如何切换全屏模式?

const fullscreen = (mode = true, el = 'body') =>
mode

? document.querySelector(el).requestFullscreen()
: document.exitFullscreen();

fullscreen(); // Opens body in fullscreen mode
fullscreen(false); // Exits fullscreen mode

13.如何检测Caps Lock是否开启?

Username: Password: Caps Lock is on

const el = document.getElementById('password');
const msg = document.getElementById('password-message');

el.addEventListener('keyup', e => {
msg.style = e.getModifierState('CapsLock')

? 'display: block'
: 'display: none';

});

14. 如何查看日期是否有效?

const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf());

isDateValid('December 17, 1995 03:24:00'); // true
isDateValid('1995-12-17T03:24:00'); // true
isDateValid('1995-12-17 T03:24:00'); // false
isDateValid('Duck'); // false
isDateValid(1995, 11, 17); // true
isDateValid(1995, 11, 17, 'Duck'); // false
isDateValid({}); // false

15. 如何从Date中获取冒号时间?

const getColonTimeFromDate = date => date.toTimeString().slice(0, 8);

getColonTimeFromDate(new Date()); // '08:38:00'

16. 如何从 Date 生成 UNIX 时间戳?

const getTimestamp = (date = new Date()) => Math.floor(date.getTime() / 1000);

getTimestamp(); // 1602162242

17、如何查看当前用户的首选语言?

const detectLanguage = (defaultLang = 'en-US') =>
navigator.language ||
(Array.isArray(navigator.languages) && navigator.languages[0]) ||
defaultLang;

detectLanguage(); // 'nl-NL'

18、如何查看用户偏好的配色方案?

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

prefersDarkColorScheme(); // true

19.如何查看设备是否支持触摸事件?

const supportsTouchEvents = () =>
window && 'ontouchstart' in window;

supportsTouchEvents(); // true

总结

以上就是我今天整理的19个实用的ES6代码片段的内容,希望这些内容对你也有用,你能够从中学习到一些新的东西,感谢你的阅读。


  1. ?=&
  2. &
相关文章
|
2月前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
43 3
|
6天前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
11 1
|
6天前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
10 1
|
6天前
|
JavaScript 前端开发
node.js 导入导出模块(CommonJS模块化规范,ES6模块化规范)
node.js 导入导出模块(CommonJS模块化规范,ES6模块化规范)
6 1
|
12天前
|
JavaScript
详细讲解JS的解构赋值(Es6)
详细讲解JS的解构赋值(Es6)
|
19天前
|
JavaScript 前端开发
JavaScript进阶-ES6新特性概览:let, const, arrow functions
【6月更文挑战第19天】ES6的`let`和`const`带来了变量声明的变革,解决了`var`的提升和作用域问题。`let`有块级作用域,避免了循环中的变量共享;`const`声明常量,值不可变但内容可变(如数组和对象)。箭头函数简化了函数定义,其`this`绑定遵循上下文,不具自己的`arguments`。这些特性提升了代码质量和可读性。
|
20天前
|
JavaScript 前端开发 Java
【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析
【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析
23 2
|
20天前
|
SQL 自然语言处理 前端开发
【JavaScript】ECMAS6(ES6)新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析
【JavaScript】ECMAS6(ES6)新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析
15 2
|
6天前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
7 0
|
6天前
|
JavaScript 前端开发
JavaScript编码之路【ES6新特性之Class类】(二)
JavaScript编码之路【ES6新特性之Class类】(二)
6 0