📕重学JavaScript:一些实用的JavaScript方法实践

简介: 这篇文章要分享一些写出漂亮、干净的代码的秘诀。👩‍💻要想写出好代码,就要搞清楚每一行都是干什么的,还要让代码看起来整洁/清晰。👌把这些秘诀记下来,以后遇到问题就能快速解决!🚀

📕重学JavaScript:一些实用的代码实践

嗨,大家好!这里是道长王jj~ 🎩🧙‍♂️

这篇文章要分享一些写出漂亮、干净的代码的秘诀。👩‍💻

要想写出好代码,就要搞清楚每一行都是干什么的,还要让代码看起来整洁/清晰。👌

把这些秘诀记下来,以后遇到问题就能快速解决!🚀

📌防止代码崩溃

代码里有一些奇怪的事情发生,这是不好的,但是我们要学会应对。😅

比如说,有时候会出现 TypeError 的错误,就是因为我们想要从 undefined/null 之类的东西里取属性。

如果你的项目可以用可选链,那就用吧,它很方便。👍

但是如果无法使用可选链,你可能会遇到下面这种情况:

const found = [{
    name: "王jj" }].find(i => i.name === '林xx');
console.log(found.name);
// TypeError: Cannot read property 'name' of undefined

现在你可以这样避免这个错误:

const found = [{
    name: "王jj" }].find(i => i.name === '林xx') || {
   };
console.log(found.name);
// undefined

当然这要看具体情况,不过对于小项目来说还是可以的。现在你不需要编写大量代码来处理它了。

📌屏蔽字符串

有时候我们需要把一些变量隐藏起来。我们只保留字符串 substr(-3) 的最后 3 个字符,其他的都用一些符号(比如 * )代替。🙈

const password = "hahahacde";
password.substr(-3).padStart(password.length, "*");
// ******cde

📌生成随机数列表

有时候我们需要一堆假数据来做一些事情。所以这里有一个小技巧可以轻松地做到这一点。👇

Array.from({
    length: 10 }, Math.random)

// [0.7222684333921601, 0.7280629203984461, 0.41602354124964935, 0.5217500130889969, 0.9377950574322391, 0.5640588877216546, 0.2526865158094982, 0.002992488477135513, 0.9815489925438687, 0.6208392853986444]

Array.from({
    length: 1000 }, (v, i) => i)
// [0, 1, 2, 3, 4, 5, 6....999]

📌转换颜色数据:RGB → HEX

想把 RGB 变成 HEX ?不用下载任何库,就能做到!👏

const rgb2hex = ([r, g, b]) =>
  '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).substr(1);

rgb2hex([76, 11, 181]);
// #4c0bb5

📌转换颜色数据:HEX → RGB

转换回来👏

const hex2rgb = hex =>
  [1, 3, 5].map((h) => parseInt(hex.substring(h, h + 2), 16));

hex2rgb("#4c0bb5");
// [76, 11, 181]

📌检查奇数偶数

const value = 232;  

if (value & 1) console.log("奇");
else console.log("偶");
// 偶

📌检查有效的 URL

你们可能都知道这个方法来检查 URL 是否正确,但还是给你们看看吧。😊

const isValidURL = (url) => {
   
  try {
   
    new URL(url);
    return true;
  } catch (error) {
   
    return false;
  }
};

isValidURL("https://wangxinleo.cn");
// true

isValidURL("https//wangxinleo");
// false

📌如何显示“更新于N秒/分/小时”等等

有时候你想把日期显示成 6 分钟前 这样的格式,但又不想用一个很大的库。这里有一个小代码,你可以随意改一改,用起来很方便。👇

const fromAgo = (date) => {
   
  const ms = Date.now() - date.getTime();
  const seconds = Math.round(ms / 1000);
  const minutes = Math.round(ms / 60000);
  const hours = Math.round(ms / 3600000);
  const days = Math.round(ms / 86400000);
  const months = Math.round(ms / 2592000000);
  const years = Math.round(ms / 31104000000);

  switch (true) {
   
    case seconds < 60:
      return `${
     seconds} 秒前"`;
    case minutes < 60:
      return `${
     minutes} 分钟前"`;
    case hours < 24:
      return `${
     hours} 小时前"`;
    case days < 30:
      return `${
     days} 天前`;
    case months < 12:
      return `${
     months} 月前`;
    default:
      return `${
     years} 年前`;
  }
};

const createdAt = new Date(2023, 3, 5);
fromAgo(createdAt); // '3 月前'

📌如何优雅生成路径

我们经常要用到 app/xxxx ,还要对它们做一些操作。如果我们想要创建一个带有参数的路径,然后让浏览器跳转到那里,generatePath 就能帮我们!🚀

const generatePath = (path, obj) =>
    path.replace(/(\:[a-z]+)/g, (v) => obj[v.substr(1)]);

const route = "/app/:page/:id";
generatePath(route, {
   
  page: "products",
  id: 85,
});
// /app/products/123

📌如何优雅地从路径中获取参数

接下来我们要拿到我们的参数。另外,你还可以用下面的方法来轻松地处理你的数据。👍

const getPathParams = (path, pathMap, serializer) => {
   
  path = path.split("/");
  pathMap = pathMap.split("/");
  return pathMap.reduce((acc, crr, i) => {
   
    if (crr[0] === ":") {
   
      const param = crr.substr(1);
      acc[param] = serializer && serializer[param]
        ? serializer[param](path[i])
        : path[i];
    }
    return acc;
  }, {
   });
};

getPathParams("/app/products/123", "/app/:page/:id");
// { page: 'products', id: '123' }

getPathParams("/items/2/id/8583212", "/items/:category/id/:id", {
   
  category: v => ['Car', 'Mobile', 'Home'][v],
  id: v => +v
});
// { category: 'Home', id: 8583212 }

📌如何优雅地生成包含query参数的路径

const generatePathQuery = (path, obj) =>
  path +
  Object.entries(obj)
    .reduce((total, [k, v]) => (total += `${k}=${encodeURIComponent(v)}&`), "?")
    .slice(0, -1);

generatePathQuery("/user", {
    name: "wangjj", age: 30 }); 
// "/user?name=wangjj&age=30"

📌从Query中获取参数

const getQueryParams = url =>
  url.match(/([^?=&]+)(=([^&]*))/g).reduce((total, crr) => {
   
    const [key, value] = crr.split("=");
    total[key] = value;
    return total;
  }, {
   });

getQueryParams("/user?name=wangjj&age=30");
// { name: 'wangjj', age: '30' }

🎉 你觉得怎么样?这篇文章可以给你带来帮助吗?当你处于这个阶段时,你发现什么对你帮助最大?如果你有任何疑问或者想进一步讨论相关话题,请随时发表评论分享您的想法,让其他人从中受益。🚀✨

目录
相关文章
|
6天前
|
存储 JavaScript 前端开发
史上最详细JavaScript数组去重方法(11种)
使用set和Array.from ()方法 array.from可以将set结构转成数组
21 7
|
1天前
|
前端开发 JavaScript
前端 JS 经典:数组去重万能方法
前端 JS 经典:数组去重万能方法
6 0
|
1天前
|
前端开发 JavaScript 流计算
前端 js 经典:字符串超全方法总结
前端 js 经典:字符串超全方法总结
9 0
|
1天前
|
前端开发 JavaScript
前端 js 经典:数组常用方法总结
前端 js 经典:数组常用方法总结
10 0
|
2天前
|
前端开发 JavaScript 开发者
JavaScript中的异步编程方法总结
在JavaScript开发中,处理异步操作是非常常见的情况。本文将总结JavaScript中常用的异步编程方法,包括Callback、Promise、Async/Await等,分析其优缺点,并提供使用建议。
|
4天前
|
缓存 前端开发 JavaScript
React和Next.js开发常见的HTTP请求方法
React和Next.js开发常见的HTTP请求方法
7 0
|
4天前
|
前端开发 JavaScript
前端 JS 经典:Math 常用方法汇总
前端 JS 经典:Math 常用方法汇总
6 0
|
4天前
|
前端开发 JavaScript
前端 js 经典:Object 常用原生方法
前端 js 经典:Object 常用原生方法
10 2
|
4天前
|
前端开发 JavaScript
前端 js 经典:array 原生方法
前端 js 经典:array 原生方法
10 1
|
4天前
|
JavaScript 前端开发
JS中正则方法的使用 - 蓝易云
以上就是JavaScript中正则方法的基本使用。这些方法可以用于执行复杂的字符串处理和验证任务。
24 1