龙空技术网

经典又常用的JS代码片段

simon锋 177

前言:

现在姐妹们对“js中文utf8”大约比较关切,兄弟们都想要了解一些“js中文utf8”的相关内容。那么小编在网上收集了一些有关“js中文utf8””的相关知识,希望朋友们能喜欢,看官们一起来学习一下吧!

日常开发中,一般的程序员通常会遇到以下场景:

vue中遍历一个列表,但接口数据没有唯一标识,需要手动生成UUID来v-bind:key,怎么生成呢?Google一下运行一段复杂代码,记得好像H5新的Api Worker可以开启多线程执行还能避免阻塞,但是具体怎么用呢?Google一下当脱离框架,要实现删除一个节点、为节点添加或删除类、插入节点等操作时,隐隐记得好像都做过,但是忘了,Google一下遇到设备兼容问题要对某个环境做特殊处理时,怎么判断移动端下的ios设备的自带浏览器?Google一下有一个打乱数组的需求,这个我做过,(⊙o⊙)…好像写不太出来。算了,Google一下

不知道各位程序猿兄弟姐妹有没有出现以上类似场景,笔者是历历在目了。在开发时,很多功能我们都实现过,或者死记硬背过,或者看过实现原理。但是一旦到了应用的时候,脑袋便一片空白。所以还是那句老话,好记性不如烂笔头。开发不比面试,遇到问题随心所欲,要百度就百度,要谷歌就谷歌,但是查到的内容就参差不齐了,如果查到的文章本身就有问题,那试错成本就太高了。为了避免一般的程序员日复一日的Google,本文旨在打造一份满足日常开发的原生js代码片段库。可让一般的程序员可开箱即用,节省额外搜索的时间。

js代码片段使用 ES6 编写,已尽量精简和考虑兼容问题,大家可点赞、收藏一波,以便使用,闲暇时可常打开看看推敲其实现原理。

笔者会不定期更新哟,有问题可在评论区一起讨论,谢谢大家..

工具生成 UUID

const UUIDGeneratorBrowser = () =>  ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>    (      c ^      (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))    ).toString(16)  );// ExamplesUUIDGeneratorBrowser(); // '7982fcfe-5721-4632-bede-6000885be57d'
解析 cookie
const parseCookie = (str) =>  str    .split(";")    .map((v) => v.split("="))    .reduce((acc, v) => {      acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());      return acc;    }, {});// ExamplesparseCookie("foo=bar; equation=E%3Dmc%5E2");// { foo: 'bar', equation: 'E=mc^2' }
获取网址参数
const getURLParameters = (url) =>  (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(    (a, v) => (      (a[v.slice(0, v.indexOf("="))] = v.slice(v.indexOf("=") + 1)), a    ),    {}  );// ExamplesgetURLParameters("google.com"); // {}getURLParameters(";);// {name: 'Adam', surname: 'Smith'}
复制到剪切板

以下方式仅在用户执行操作时有效,如:click 事件

const copyToClipboard = (str) => {  const el = document.createElement("textarea");  el.value = str;  el.setAttribute("readonly", "");  el.style.position = "absolute";  el.style.left = "-9999px";  document.body.appendChild(el);  const selected =    document.getSelection().rangeCount > 0      ? document.getSelection().getRangeAt(0)      : false;  el.select();  document.execCommand("copy");  document.body.removeChild(el);  if (selected) {    document.getSelection().removeAllRanges();    document.getSelection().addRange(selected);  }};// ExamplescopyToClipboard("Lorem ipsum"); // 'Lorem ipsum' copied to clipboard.
简版 jquery 选择器
// 仅选中第一个元素const $ = document.querySelector.bind(document);// 选中所有const $$ = document.querySelectorAll.bind(document);const mainContent = $(".main-content");const externalLinks = $$('a[target="_blank"]');
多线程执行函数
const runAsync = (fn) => {  const worker = new Worker(    URL.createObjectURL(new Blob([`postMessage((${fn})());`]), {      type: "application/javascript; charset=utf-8",    })  );  return new Promise((res, rej) => {    worker.onmessage = ({ data }) => {      res(data), worker.terminate();    };    worker.onerror = (err) => {      rej(err), worker.terminate();    };  });};// Examplesconst longRunningFunction = () => {  let result = 0;  for (let i = 0; i < 1000; i++)    for (let j = 0; j < 700; j++)      for (let k = 0; k < 300; k++) result = result + i + j + k;  return result;};/*  NOTE: Since the function is running in a different context, closures are not supported.  The function supplied to `runAsync` gets stringified, so everything becomes literal.  All variables and functions must be defined inside.*/runAsync(longRunningFunction).then(console.log); // 209685000000runAsync(() => 10 ** 3).then(console.log); // 1000let outsideVariable = 50;runAsync(() => typeof outsideVariable).then(console.log); // 'undefined'

作者:i.faker

标签: #js中文utf8