📕重学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
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
343 69
|
6月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
5月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
448 0
|
5月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
517 80
|
7月前
|
前端开发 JavaScript Java
【Java进阶】JavaScript电灯开关实例:从理论到实践
这个例子展示了JavaScript的基本功能,包括操作HTML元素,监听事件,以及改变元素的样式。通过学习和理解这个例子,你可以了解到JavaScript在网页中的应用,以及如何使用JavaScript来创建交互式的网页。
146 13
|
9月前
|
前端开发 JavaScript
有没有方法可以保证在JavaScript中多个异步操作的执行顺序?
有没有方法可以保证在JavaScript中多个异步操作的执行顺序?
383 58
|
6月前
|
人工智能 监控 前端开发
基于 Next.js 的书法字体生成工具架构设计与 SSR 优化实践
本项目是一款书法字体生成工具,采用 Next.js 14(App Router)与 Tailwind CSS 构建前端,阿里云 Serverless 部署后端。通过混合渲染策略(SSG/SSR/CSR)、Web Worker 异步计算及 CDN 字体分片加载优化性能。服务端借助阿里云函数计算处理计算密集型任务,将平均耗时从 1200ms 降至 280ms,支持 1000+ QPS。动态路由与 ARMS 监控提升工程化水平,未来计划引入 WebGPU 和 AI 字体风格迁移技术,进一步优化用户体验。
|
7月前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
JS回收机制方法讲解
|
8月前
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
12月前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
707 62

热门文章

最新文章