广州蓝景分享—开发人员都知道的JavaScript技巧

news2024/11/16 13:16:41

在这里插入图片描述

JavaScript包含各种对典型编程思想有用的一些技巧,在实际开发中,我们通常希望减少代码行数;因此,今天这些技巧代码希望可以帮助到你。
现在我们就开始今天的内容吧。
1、与Javascript对象相关的

01)、对象解构

将对象的值解构为变量是另一种在传统点表示法之外读取其值的方法。
下面的示例比较了用于读取对象值的经典点表示法和对象解构快捷方式。

const restaurant = {
  name: "Classico Italiano",
  menu: ["Garlic", "Bread", "Salad", "Pizza", "Pasta"],
  openingHours: {
    friday: { open: 11, close: 24 },
    saturday: { open: 12, close: 23 },
  },
};
// Longhand
console.log("value of friday in restaurant:", restaurant.openingHours.friday);
console.log("value of name in restaurant:", restaurant.name);
// Shorthand
const { name, openingHours } = restaurant;
const { openingHours: { friday } } = restaurant;
//we can go further and get the value of open in friday
const { openingHours: { friday: { open } } } = restaurant;
console.log(name, friday, open);

02)、Object.entries()

Object.entries() 是 ES8 中引入的一项功能,它允许您将文字对象转换为键/值对数组。

const credits = {
  producer: "Open Replay",
  editor: "Federico",
  assistant: "John",
};
const arr = Object.entries(credits);
console.log(arr);
Output: [
  ["producer", "Open Replay"],
  ["editor", "Federico"],
  ["assistant", "John"],
];

03)、Object.values()

Object.values() 也是 ES8 中引入的新特性,与 Object 具有类似的功能。entries() 但这没有关键部分:

const credits = {
  producer: "Open Replay",
  editor: "Federico",
  assistant: "John",
};
const arr = Object.values(credits);
console.log(arr);
Output: ["Open Replay", "Federico", "John"];

04)、对象循环速记

传统的 JavaScript for 循环语法是 for (let i = 0; i < x; i++) { … }。通过引用迭代器的数组长度,此循环语法可用于遍历数组。共有三个 for 循环快捷方式,它们提供了用于遍历数组中的对象的各种方法:

for…of 创建一个循环遍历内置字符串、数组和类似数组的对象,甚至是 Nodelist

for…in 在记录属性名称和值的字符串时访问数组的索引和对象文字上的键。

Array.forEach 使用回调函数对数组元素及其索引执行操作

const arr = ["Yes", "No", "Maybe"];
// Longhand
for (let i = 0; i < arr.length; i++) {
  console.log("Here is item: ", arr[i]);
}
// Shorthand
for (let str of arr) {
  console.log("Here is item: ", str);
}
arr.forEach((str) => {
  console.log("Here is item: ", str);
});
for (let index in arr) {
  console.log(`Item at index ${index} is ${arr[index]}`);
}
// For object literals
const obj = { a: 1, b: 3, c: 5 };
for (let key in obj) {
  console.log(`Value at key ${key} is ${obj[key]}`);
}

05)、对象属性简写

在 JavaScript 中定义对象字面量让生活变得更轻松。ES6 在为对象赋予属性方面提供了更多的简单性。如果变量名和对象键相同,则可以使用速记符号。

通过在对象字面量中声明变量,您可以在 JavaScript 中快速将属性分配给对象。为此,必须使用预期的键命名变量。这通常在您已经有一个与对象属性同名的变量时使用。

const a = 1;
const b = 2;
const c = 3;
// Longhand
const obj = {
  a: a,
  b: b,
  c: c,
};
// Shorthand
const obj = { a, b, c };

06)、Javascript For 循环

如果你想要简单的 JavaScript 并且不想依赖第三方库,这个小技巧很有用。

// Longhand:
const fruits = ['mango', 'peach', 'banana'];
for (let i = 0; i < fruits.length; i++) { /* something */ }
// Shorthand:
for (let fruit of fruits) { /* something */  }

如果您想访问文字对象中的键,这也适用:

const obj = { continent: "Africa", country: "Ghana", city: "Accra" };
for (let key in obj) console.log(key); // output: continent, country, city

07)、Array.forEach 的简写:

function logArrayElements(element, index, array) {
  console.log("a[" + index + "] = " + element);
}
[2, 4, 6].forEach(logArrayElements);
// a[0] = 2
// a[1] = 4
// a[2] = 6

2、与Javascript数组相关的

01)、数组解构

ES6 的一个有趣的新增功能是解构赋值。解构是一种 JavaScript 表达式,可以将数组值或对象属性分离到单独的变量中。换句话说,我们可以通过从数组和对象中提取数据来将数据分配给变量。

const arr = [2, 3, 4];
// Longhand
const a = arr[0];
const b = arr[1];
const c = arr[2];
// Shorthand
const [a, b, c] = arr;

02)、Spread Operator

得益于 ES6 中引入的展开运算符,JavaScript 代码使用起来更加高效和愉快。它可以代替特定的数组函数。展开运算符中有一系列的三个点,我们可以用它来连接和克隆数组。

const odd = [3, 5, 7];
const arr = [1, 2, 3, 4];
// Longhand
const nums = [2, 4, 6].concat(odd);
const arr2 = arr.slice();
// Shorthand
const nums = [2, 4, 6, ...odd];
const arr2 = [...arr];

与 concat() 函数不同,您可以使用扩展运算符将一个数组插入另一个数组中的任意位置。

const odd = [3, 5, 7];
const nums = [2, ...odd, 4, 6]; // 2 3 5 7 4 6

3、与Javascript字符串相关

01)、多行字符串

如果您曾经发现自己需要在代码中编写多行字符串,那么您可以这样写:

// Longhand
const lorem =
  "Lorem, ipsum dolor sit amet" +
  "consectetur adipisicing elit." +
  " Quod eaque sint voluptatem aspernatur provident" +
  "facere a dolorem consectetur illo reiciendis autem" +
  "culpa eos itaque maxime quis iusto quisquam" +
  "deserunt similique, dolores dolor repudiandae!" +
  "Eaque, facere? Unde architecto ratione minus eaque" +
  "accusamus, accusantium facere, sunt" +
  "quia ex dolorem fuga, laboriosam atque.";

但是有一种更简单的方法,只需使用反引号即可完成。

// Shorthand:
const lorem = `Lorem, ipsum dolor sit amet
 consectetur adipisicing elit.
 Quod eaque sint voluptatem aspernatur provident
 facere a dolorem consectetur illo reiciendis autem
 culpa eos itaque maxime quis iusto quisquam
 deserunt similique, dolores dolor repudiandae!
 Eaque, facere? Unde architecto ratione minus eaque
 accusamus, accusantium facere, sunt
 quia ex dolorem fuga, laboriosam atque.`;

02)、将字符串转换为数字

您的代码可能偶尔会收到必须以数字格式处理的字符串格式的数据。这不是一个大问题;我们可以快速转换它。

// Longhand
const num1 = parseInt('1000');
const num2 = parseFloat('1000.01')
// Shorthand
const num1 = +'1000'; //converts to int datatype
const num2 = +'1000.01'; //converts to float data type

03)、模板文字

我们可以在不使用 (+) 的情况下将许多变量附加到字符串中。模板文字在这里派上用场。用反引号包裹你的字符串,用 ${ } 包裹你的变量,以利用模板文字。

const fullName = "Ama Johnson";
const job = "teacher";
const birthYear = 2000;
const year = 2025;
// Longhand
const Fullstr =
  "I am " + fullName + ", a " + (year - birthYear) + " years old " + job + ".";
// Shorthand
const Fullstr = `I am ${fullName}, a ${year - birthYear} years old ${job}. `;

模板字面量为我们省去了许多使用 + 运算符连接字符串的麻烦。

4、与指数有关的

01)、指数幂速记

将第一个操作数乘以第二个操作数的幂的结果是求幂运算符 ** 返回的结果。它与 Math.pow 相同,只是 BigInts 也被接受为操作数。

// Longhand
Math.pow(2, 3); //8
Math.pow(2, 2); //4
Math.pow(4, 3); //64
// Shorthand
2 ** 3; //8
2 ** 4; //4
4 ** 3; //64

02)、十进制底指数

这个可能以前见过。本质上,这是一种写整数的奇特方法,没有最后的零。例如,表达式 1e8 表示 1 后跟八个零。它表示十进制基数 100,000,000,JavaScript 将其解释为浮点类型。

// Longhand
for (let i = 0; i < 10000000; i++) { /* something */ }
// Shorthand
for (let i = 0; i < 1e7; i++) { /* something */ }
// All the below will evaluate to true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;
1e6 === 1000000;
1e7 === 10000000;
1e8 === 100000000;

5、其他操作的 JavaScript 简写

01)、短路评估

短路评估也可以替代 if…else 子句。当变量的预期值为 false 时,此快捷方式使用逻辑或运算符 || 为变量提供默认值。

let str = "";
let finalStr;
// Longhand
if (str !== null && str !== undefined && str != "") {
  finalStr = str;
} else {
  finalStr = "default string";
}
// Shorthand
let finalStr = str || "default string"; // 'default string'

02)、默认参数

if 语句用于定义函数参数的默认值。在 ES6 中,您可以在函数声明本身中定义默认值。如果没有传递任何值或未定义,则默认函数参数允许使用默认值初始化参数。

以前都是在函数体中测试参数值,如果没有定义就赋值。

默认情况下,JavaScript 中的函数参数是未定义的。然而,设置不同的默认设置通常是有利的。在这里,默认设置可能很有用。

// Longhand
function volume(a, b, c) {
  if (b === undefined) b = 3;
  if (c === undefined) c = 4;
  return a * b * c;
}
// Shorthand
function volume(a, b = 3, c = 4) {
  return a * b * c;
}

03)、隐式返回函数

我们经常使用关键字 return 来指示函数的最终输出。单语句箭头函数将隐式返回其计算结果(该函数必须省略方括号 {} 才能这样做)。

对于多行语句,例如表达式,我们可以将返回表达式包裹在括号 () 中。

function capitalize(name) {
  return name.toUpperCase();
}
function add(numG, numH) {
  return numG + numH;
}
// Shorthand
const capitalize = (name) => name.toUpperCase();
const add = (numG, numH) => numG + numH;
// Shorthand TypeScript (specifying variable type)
const capitalize = (name: string) => name.toUpperCase();
const add = (numG: number, numH: number) => numG + numH;

04)、声明变量

在函数的开头声明变量赋值是个好主意。这种精简方法可以帮助您在一次创建大量变量时节省大量时间和空间。

// Longhand
let x;
let y;
let z = 3;
// Shorthand
let x, y, z=3;

但是,请注意,出于易读性考虑,许多人更喜欢用手写方式声明变量。

05)、可选链接

我们可以使用点表示法访问对象的键或值。我们可以通过可选链接更进一步并读取键或值,即使我们不确定它们是否存在或是否已设置。如果键不存在,则可选链接的值未定义。

下面是一个可选链的例子:

const restaurant = {
  details: {
    name: "Classico Italiano",
    menu: ["Garlic", "Bread", "Salad", "Pizza"],
  },
};
// Longhand
console.log(
  "Name ",
  restaurant.hasOwnProperty("details") &&
    restaurant.details.hasOwnProperty("name") &&
    restaurant.details.name
);
// Shorthand
console.log("Name:", restaurant.details?.name);

06)、双位非运算符

JavaScript 中的内置 Math 对象通常用于访问数学函数和常量。一些函数提供了有用的技术,让我们可以在不引用 Math 对象的情况下调用它们。

例如,我们可以通过使用两次按位非运算符来获得整数的 Math.floor() ~~。

const num = 7.5;
// Longhand
const floorNum = Math.floor(num); // 7
// Shorthand
const floorNum = ~~num; // 7

以上就是小蓝今天跟大家分享的内容,觉得有帮助的话,可以点个赞,或者关注我们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2.0简讲!

Vue2.0简讲 Draven入门1.1、响应式渲染1.1.0、Vue创建1.1.1、指令(7)1.1.2、class与style绑定HTML Class对象语法数组语法绑定内联样式对象语法数组语法1.1.3、条件渲染v-if else-iftemplate v-if1.1.4、列表渲染v-forkey数组更新检测列表渲染Vue2列表渲染Vue3过滤应用(模糊查询…

机器学习与数据挖掘——前言

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 这是从老师的PPT里面提取出来的&#xff0c;知识点分布比较零散&#xff0c;可能他做PPT的时候也没想那么多。 一&#xff1a;机器学习 机器学习的定义&#xff1a;一个计算机程序被称为…

前端岗位初入职场后的最初一段时间需要做什么

文章题目有点长&#xff0c;叫 《前端岗位初入职场后的最初一段时间需要做什么》&#xff0c;说下写这篇文的初衷&#xff0c;在前端自学团里有很多刚毕业或者是刚从培训班出来的同学&#xff0c;在群里天天讨论着找工作和面试的事情&#xff0c;面试的题在很多app或者小程序可…

四、【React-Router6】高亮 NavLink

项目修改自 上一节 的 Demo 这里需要注意的变化 默认高亮样式类名如果依然是 active 则依然默认有效 6 里移除了 activeClassName &#xff0c;如果我的高亮样式类名是 peiqi&#xff0c;需要配置 className 为一个函数 函数接收两个参数 isActive&#xff1a;是否激活isPendi…

Arduino开发实例-DIY双向访客计数器和自动灯光控制

双向访客计数器和自动灯光控制 1、应用介绍 本应用将使用 Arduino 创建双向访客柜台和自动灯光控制系统。该应用基于一对 IR(红外)传感器,可在出现中断时检测障碍物。实际上,该系统可以检测来自两个方向的访客。从而对进入的访客数量和离开的访客数量进行计数。 该双向访…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校心理健康咨询平台vknhv

毕业设计其实不难&#xff0c;主要毕业的时候任务太紧了&#xff0c;所以大家都非常忙没有时间去做&#xff0c;毕业设计还是早做准备比较好&#xff0c;多花点时间也可以做出来的&#xff0c;建议还是自己动手去做&#xff0c;比如先选一个题&#xff0c;这样就有方向&#xf…

GIS工具maptalks开发手册(三)01——绘制工具

GIS工具maptalks开发手册(三)01——绘制工具 效果 代码 1、html官方版 <!DOCTYPE html> <html> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1"> <title>交互 - 绘制…

vite + vue3.0 + ts 项目搭建

Welcome to vue3-elementplus-admin &#x1f44b; vite vue3 Pinia elementUi-plus 无限级菜单 权限管理 后台模板 &#x1f3e0; Homepage Author &#x1f464; xuxuxu-ni Github: xuxuxu-niQQ: 595485548QQ群: 157216616email: 595485548qq.com Prerequisites node…

安卓使用动画启动Acitvity

1.检查系统版本 动画过渡Activity适用于*Android5.0&#xff08;API21&#xff09;*及以上&#xff0c;在代码增加中检查版本增强代码健壮性。 2.指定自定义过渡动画。 过渡可以在xml文件中指定&#xff0c;也可以直接在代码中指定。使用Window.requestFeature()声明启动窗口…

C语言:结构体

1、结构体&#xff1a; 定义&#xff1a;结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量 结构的声明&#xff1a; struct tag {member-list;}variable-list;举例&#xff1a;声明一个学生类型&#xff0c;想通过学生类型来创建学生变…

【Matplotlib绘制图像大全】(二十七):Matplotlib将数组array保存为图像

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

SpringBoot+Vue实现前后端分离的大学生志愿者管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

【C++修炼之路】10. vector类

每一个不曾起舞的日子都是对生命的辜负 vector本节目标1. vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义&#xff08;构造函数&#xff09;1.2.2 vector iterator的使用1.2.3 vector的空间增长问题1.2.4 vector增删查改2. vector的模拟实现2.1 构造函…

Mellanox CX4 offload 卸载功能介绍

无状态功能卸载 cx4支持多种类型的无状态卸载&#xff0c;如下面列表所示。 Checksum OffloadLarge Send OffloadsReceive Side ScalingTransmit Side ScalingInterrupt ModerationLarge Receive OffloadsVLAN insertion and strippingFlow Steering at layers 2, 3 and 4Pac…

使用MotionLayout实现模拟启动页动画和轮播图

目录效果图展示启动页效果轮播图效果MotionLayout详解准备工作正题轮播图效果实现ConstraintSetTransitionCarousel浅述启动页的实现插入gif图源码在这里&#xff1a; 源码链接本文是用java写的效果图展示 下面是本博客我使用真机所实现的功能展现&#xff0c;方便大家根据自身…

化妆品行业的数字进化论:S2B2B电商网站如何助力化妆品企业打造增长新动能

近年来&#xff0c;伴随着国家经济的快速发展和消费者对“美”的追求日益强烈&#xff0c;大大推动了化妆品行业的蓬勃发展&#xff0c;根据公开数据显示&#xff0c;2021年我国化妆品零售总额达4026亿元&#xff0c;较2020年同比增长18.40%&#xff0c;我国目前已成为全球第二…

一篇文章让你全方位掌握git版本控制管理

注&#xff1a;侵权请联系作者删除 目录 1.引入&#xff1a; 2.Git 的工作区域和流程 3.stash区域 4.git基本操作 A.git add B.git commit c.git pull D.git fetch E.git branch F.git init 5.在项目中实际运用案例&#xff1a; A.在github上创建一个新仓库 B.复制刚创建…

matlab使用hampel滤波,去除异常值

此示例显示了Hampel用于检测和删除异常值的过程的 实现。 最近我们被客户要求撰写关于hampel滤波的研究报告&#xff0c;包括一些图形和统计输出。 产生一个包含24个样本的随机信号x。 重置随机数生成器以获得可重复的结果。 rng defaultlx 24; x randn(1,lx); 围绕x的每…

网页前端知识汇总(六)——如何让网页全部内容显示成灰色

最近很多做网站前端的技术员是不是都接到了老板的任务&#xff0c;让网站的网页显示效果都变成灰色&#xff0c;这个也是随某些事件的发生或者某些专题内容觉得需要这样做的&#xff0c;大部分用于大家都不愿意看到的专题事件如某某烈士&#xff0c;逝去的伟人等&#xff1b;大…

Scala013--Scala中的方法

因为Scala是一种函数式编程语言&#xff0c;因此在Scala中基本上都是方法和函数&#xff0c;但是需要注意的是&#xff0c;在Java中方法和函数是同一个意思&#xff0c;但是在Scala中函数和方法的含义不同&#xff1a; 方法&#xff1a;是类和对象的成员函数&#xff1a;是对象…