前端工程化:ES6特性

本文为个人学习笔记整理,仅供交流参考,非专业教学资料,内容请自行甄别

文章目录

  • 一、let与var
    • 1.1、越狱问题
    • 1.2、变量的重复声明
    • 1.3、变量提升问题
  • 二、解构
    • 2.1、数组解构
    • 2.2、对象解构
    • 2.3、方法解构
  • 三、链判断
  • 四、参数默认值
  • 五、箭头函数
  • 六、模板字符串
  • 七、异步操作
  • 八、Async
  • 九、Await
  • 十、模块化


一、let与var

  let与var是定义变量的两种方式。一般推荐使用前者,主要是考虑到以下的这些因素:

1.1、越狱问题

{var a = 10;let b = 20;
}
console.log(a);
console.log(b);

  这段代码的运行结果:
在这里插入图片描述
  a和b的作用域都应该是在大括号中的,而使用var定义的a变量,作用域超出了大括号。

1.2、变量的重复声明

var a = 1;
var a = 2;
var a = 3;
console.log(a)

  这段代码的运行结果,前两次赋值的a被覆盖了。
在这里插入图片描述

// 报错
let b = 4;
let b = 5;
console.log(b)

  这段代码的运行结果,let声明的同一个变量不能重复赋值
在这里插入图片描述

1.3、变量提升问题

console.log(a);
var a = 10;

  这段代码的运行结果,打印出的a为空:
在这里插入图片描述

console.log(b);
let b = 2;

  这段代码的运行结果,报错,因为使用let声明的变量,在打印时还没有进行赋值操作
在这里插入图片描述

二、解构

  解构分为数组解构,对象解构和方法解构

2.1、数组解构

let arr = [1,2,3];//如果需要获取数组中的某一个元素,常规写法
console.log(arr[0]);//解构
let [x,y,z] = arr;
console.log(x)
console.log(y)
console.log(z)

2.2、对象解构

let person = {name:"zhangsan",age:18,email:"2458677367@gmail.com"
}//获取对象中的某个属性,常规写法
console.log(person.name)
console.log(person.age)
console.log(person.email)//将对象解构
let {name,age}=person;
console.log(name)
console.log(age)

2.3、方法解构

//方法解构
function test({name,age}){console.log(name)console.log(age)
}//传入对象
test(person)

三、链判断

  我定义一个这样的对象:

let message = {body:{user:{name:'John',}}
};

  常规判空的写法,如果对象结构层级复杂,那么判空相对也会很复杂

let result = (message && message.body && message.body.user && message.body.user.name) || "default";
console.log(result)

  es6的链判断:

let result0 = message?.body?.user?.name || "default";
console.log(result0);

四、参数默认值

  假设我定义了一个方法,需要接收a和b两个参数,但是在调用时只传入了一个参数:

function test(a,b){// b = b || 1return a + b;
}console.log(test(1));

  会报错,因为1需要和空值做运算。
在这里插入图片描述
  传统的给参数默认值,可以是:

function test(a,b){b = b || 1return a + b;
}

  而es6规范,支持在函数的参数定义上,给予默认值:

function test1(a,b = 5){return a + b;
}console.log(test1(1));

在这里插入图片描述
  如果用户传递了值,则按照用户传递的为准:

function test1(a,b = 5){return a + b;
}console.log(test1(1,10));

在这里插入图片描述
  注意,默认值只能给函数中的最后一个参数设置。

五、箭头函数

  箭头函数就相当于JAVA中的lambda表达式,是函数式编程的体现:

//箭头函数
//传统做法
function print(arg){console.log(arg);
}print(2);//箭头函数
let print1 = arg => console.log(arg);
print1(3);

六、模板字符串

  如果需要进行字符串动态拼接,传统方式:

let arg1 = "1926";
let arg2 = "1848";
let info = "测试参数1:["+arg1+"],测试参数2:["+arg2+"]"console.log(info);

  采用es6的模板字符串,需要将""换成``,并且使用${}的方式取值。

let info1 = `测试参数1:[${arg1}],测试参数2:[${arg2}]`
console.log(info1);

七、异步操作

  在es6中,promise代表异步操作,并且封装了异步操作的结果:

//promise
//是js中的异步操作
console.log("start")
let promise = fetch("https://jsonplaceholder.typicode.com/posts/1")
//无需等待上一步操作的结果
console.log("finish")//promise操作成功之后
promise.then(success=>{console.log("success");
});
//promise操作失败之后
promise.catch(err=>{console.log("fail:" + err);
});

在这里插入图片描述

八、Async

  async也是将函数转换为异步的一种方式,如果需要将某个函数进行异步处理,可以使用自己封装promise的方式:

// 异步方式1
function test2(arg0){return new Promise((resolve,reject)=>{if (arg0 % 2 === 0){resolve(arg0)}else {reject("arg0不是偶数")}})
}//获取promise正确与错误的结果
test2(100).then(data=>console.log(data)).catch(error=>console.log(error));

  也可以直接在function前加入async关键字,被async关键字修饰的function,返回的依旧是一个promise对象。在处理异常时,最好的方式是直接使用throw new Error关键字进行抛出,否则async并不知道是then还是catch接收到的异常。

//异步方式2 async
async function test3(arg0){if (arg0 % 2 === 0){return arg0}else {// return "arg0不是偶数"throw new Error("arg0不是偶数")}
}//如果使用async 出现了异常但是没有抛出,async并不知道是then还是catch接收到的
test3(101).then(data=>console.log("then接收到" + data)).catch(error=>console.log("catch接收到" + error));

九、Await

  await是异步转同步的一种方式。还是以之前的fetch异步获取数据为例,首先fetch得到的是一个promise对象,需要通过then,catch进行处理。在将结果使用.json进行转换时,得到的又是另一个promise对象,依旧要进行then,catch的处理。

//读取网页数据案例,两个异步操作
function getFile() {let urlResult = fetch("https://jsonplaceholder.typicode.com/posts/1");urlResult.then((res) => {let urlResJson = res.json();urlResJson.then((res) => {console.log(res)})}).catch((err) => {console.log(err)})
}getFile()

  而使用await关键字,则是将promise的异步操作转为同步:

async function getFile1() {let urlResult = await fetch("https://jsonplaceholder.typicode.com/posts/1");let urlResJson = await urlResult.json();console.log(urlResJson)
}getFile1()

在这里插入图片描述

十、模块化

  如果一个js文件,需要导入另一个js文件中的内容,可以通过importexport关键字实现:
  user.js

const user = {username :"zhangsan",age:18
}const isAdult = (age) =>{if (age > 18){console.log("成年人")}else {console.log("未成年人")}
}//导出用户实体和方法
export {user,isAdult
}

  main.js

import {user,isAdult
} from "./user.js";isAdult(user.age)

  如果在html中引入,则需要加上type="module"

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试模块化</title><script src="lib/module/main.js" type="module"></script>
</head>

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

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

相关文章

大屏项目展示

一、项目克隆与基础操作 我们参考的项目 互联网设备可视化平台---IofTV-Screen: 🔥一个基于 vue、datav、Echart 框架的物联网可视化(大屏展示)模板,提供数据动态刷新渲染、屏幕适应、数据滚动配置,内部图表自由替换、Mixins注入等功能,持续更新.... 将次项目克隆到本…

基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析实践技术应用

在自然和社会科学领域有大量与地理或空间有关的数据&#xff0c;这一类数据一般具有严重的空间异质性&#xff0c;而通常的统计学方法并不能处理空间异质性&#xff0c;因而对此类型的数据无能为力。以地理加权回归为基础的一系列方法&#xff1a;经典地理加权回归&#xff0c;…

【Flask 基础 ①】 | 路由、参数与模板渲染

0 序言 Flask 是 Python 生态中一款轻量级 Web 框架&#xff0c;以简洁、灵活著称。 学习 Flask 的意义在于&#xff1a; 快速开发&#xff1a;通过少量代码即可搭建功能完整的 Web 应用&#xff1b;理解原理&#xff1a;其设计清晰体现了 Web 框架的核心逻辑&#xff0c;如路由…

wordpress登陆前登陆后显示不同的顶部菜单

在WordPress中让“未登录”和“已登录”用户看到不同的顶部菜单&#xff0c;最干净、最安全、最可维护的做法是&#xff1a; 在同一个菜单位置(themelocation)里&#xff0c;根据is_user_logged_in()动态切换菜单。 下面给出三种常见实现方式&#xff0c;按推荐程度排序。任选…

【昇腾推理PaddleOCR】生产级部署方式

已知的在昇腾上推理Paddle OCR有三种方法&#xff1a; 概要&#xff1a; PyTorch官方提供了昇腾插件包&#xff0c;安装后虽然可以支持PytorchOCR和PaddlePaddle的推理任务&#xff0c;但性能较低。换句话说&#xff0c;PaddlePaddle框架层面支持了昇腾&#xff0c;但具体到某个…

LangChain摘要记忆组件的使用与解析

01. 摘要记忆组件的类型 在 LangChain 中使用缓冲记忆组件要不就保存所有信息&#xff08;占用过多容量&#xff09;&#xff0c;要不就保留最近的记忆信息&#xff08;丢失太多重要信息&#xff09;&#xff0c;那么有没有一种情况是既要又要呢&#xff1f; 所以折中方案就出…

NAT与智能选路

1、NAT 基础概念核心作用&#xff1a;私网地址无法在 Internet 上直接使用和分配&#xff0c;NAT 通过将私有地址与公有地址及端口进行转换&#xff0c;实现私网与公网的通信。转换示例&#xff1a;内网用户&#xff08;10.1.1.1&#xff09;访问外网 FTP Server&#xff08;12…

【05】VisionMaster入门到精通——圆查找

文章目录1 运行参数先检测出多个边缘点然后拟合成圆形&#xff0c;可用于圆的定位与测量 1 运行参数 先检测出多个边缘点然后拟合成圆形&#xff0c;可用于圆的定位与测量——运行参数 扇环半径——圆环ROI的内外圆半经&#xff1b; 边绿类型 最强——只检测扫描范围内梯度最…

p5.js 用 beginGeometry () 和 endGeometry () 打造自定义 3D 模型

点赞 关注 收藏 学会了 在 p5.js 的 3D 绘图中&#xff0c;这两个函数是一对 “黄金搭档”&#xff1a; beginGeometry()&#xff1a;像一个 “3D 模型的开关”&#xff0c;调用它之后&#xff0c;你画的所有简单 3D 形状&#xff08;比如球体、圆锥&#xff09;都会被 “…

(9)NMPC非线性模型预测控制及机械臂ROS控制器实现

前言 本篇介绍Nonlinear Model Predictive Control&#xff0c;非线性模型预测控制&#xff0c;MPC是一种现代先进的控制方法&#xff0c;而NMPC特指对非线性模型的控制&#xff0c;其核心思想是在每个控制周期内利用系统的非线性模型及损失函数&#xff0c;预测未来一段时间内…

达梦数据库备份与还原终极指南:从基础到增量策略实战

第一部分&#xff1a;备份与还原核心原理 一、备份还原本质解析数据存储机制 数据存储在物理文件页中&#xff08;最小单位4K-32K&#xff09;有效数据页 文件描述页 已分配使用页日志优先原则&#xff1a;操作先写REDO日志再更新数据文件三大核心操作操作作用关键特性备份复…

设计模式篇:在前端,我们如何“重构”观察者、策略和装饰器模式

设计模式篇&#xff1a;在前端&#xff0c;我们如何“重构”观察者、策略和装饰器模式 引子&#xff1a;代码里“似曾相识”的场景 作为开发者&#xff0c;我们总会遇到一些“似曾相识”的场景&#xff1a; “当这个数据变化时&#xff0c;我需要通知其他好几个地方都更新一…

Node.js 服务可以实现哪些功能

以下是 Node.js 服务可以实现的 100 个功能&#xff0c;涵盖 Web 开发、工具链、系统集成、自动化等方向&#xff0c;按类别分类整理&#xff1a;一、Web 开发相关 RESTful API 服务GraphQL 服务实时聊天应用&#xff08;WebSocket/Socket.IO&#xff09;博客/CMS 系统电子商务…

如何安装和使用 Cursor AI 编辑器

在软件开发领域&#xff0c;几乎每天都有新工具涌现&#xff0c;找到最适合您工作流程的工具可能会改变游戏规则。Cursor 是一款 AI 驱动的代码编辑器&#xff0c;其革命性的 API 管理插件 EchoAPI 就是其中的代表。它们强强联手&#xff0c;承诺在一个强大的平台内简化您的编码…

LangChain框架概念及简单的使用案例

一、LangChain介绍LangChain是一个强大的用于开发大模型应用程序的框架&#xff0c;为开发提供丰富的工具和组件&#xff0c;使得构造复杂的自然语言处理变得更加高效和便捷。它允许开发者将大语言模型与其他数据源工具集成&#xff0c;从而创建出能处理各种任务的智能体应用&a…

安卓audio 架构解析

audio_port_handle_t • 定义&#xff1a;audio_port_handle_t标识音频设备&#xff08;如扬声器、耳机&#xff09;或虚拟端口&#xff08;如远程 submix&#xff09;。它在设备连接或策略路由时由AudioPolicyManager分配&#xff0c;例如通过setDeviceConnectionState()动态注…

GitHub 上 Star 数量前 8 的开源 MCP 项目

原文链接&#xff1a;https://www.nocobase.com/cn/blog/github-open-source-mcp-projects。 MCP 这个词真正被广泛提起&#xff0c;是在 2025 年年初&#xff0c;尤其是在 AI 工具开发圈。3 月&#xff0c;一场围绕 “MCP 是否能成为未来标准协议” 的争论彻底点燃了讨论热度…

【数据结构与算法】数据结构初阶:排序内容加餐(二)——文件归并排序思路详解(附代码实现)

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 &#x1f349;学习方向&#xff1a;C/C方向 ⭐️人生格言&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为…

Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程

MAVROS2目前不是官方提供的标准&#xff0c;主要区别还是通信机制的不同&#xff0c;以及API接口的区别&#xff0c;在使用的过程中&#xff0c;根据对应的版本安装即可&#xff0c;此处进提供简易的二进制安装方法&#xff0c;源码安装暂不提供&#xff0c;前去使用mavros即可…

Ubuntu 安装 ns-3 教程

Ubuntu 安装 ns-3最全 教程 1. 环境更新 sudo apt update sudo apt install git2. Ns3 最低依赖要求 2.1 安装依赖 安装依赖网址&#xff1a;根据自己安装的版本安装对应依赖。 https://www.nsnam.org/wiki/Installation Ubuntu/Debian/Mint 以下软件包列表在 Ubuntu 22.…