【前端技术】 ES6 介绍及常用语法说明

在这里插入图片描述

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
💕《Jenkins实战》专栏主要介绍Jenkins+Docker+Git+Maven的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

【前端技术成长之路】 ES6介绍及语法说明

  • ES6介绍
  • 1、变量声明
    • 1.1 let关键字
    • 1.2 const关键字
  • 2、箭头函数
    • 2.1 没有自己的 this 绑定
    • 2.2 没有 arguments 对象
    • 2.3 不能用作构造函数
    • 2.4 没有 prototype 属性
  • 3、模板字符串
  • 4、解构赋值
    • 4.1 数组解构
    • 4.2 对象解构
  • 5、默认参数
  • 6、扩展运算符
    • 6.1 数组展开
    • 6.2 对象展开
    • 6.3 字符串展开
  • 7、模块化
    • 7.1 导出模块
    • 7.2 导入模块
  • 8、Promise
  • 9、生成器函数
  • 总结

ES6介绍

ECMAScript 6(ES6),又称 ECMAScript 2015,是 JavaScript 的一个重要版本,引入了许多新特性,使得开发者能够编写更加简洁、优雅和高效的代码。本文将介绍 ES6 的一些关键特性,并通过代码示例展示其用法。

1、变量声明

ES6 之前,JavaScript 只有 var 用于变量声明。ES6 引入了 letconst,它们提供了块级作用域和不可变的变量。

1.1 let关键字

let关键字用于声明可变的变量,它的作用范围限定在当前的块级作用域内,包括花括号({})内部的任何代码块。在同一个作用域内,不能重复声明同名的let变量。

在以前使用 var 声明变量会存在:越域重复声明变量提升等问题,我们来看看代码演示

跨域问题

// var 越域的问题
if (true) {
    var x = 10;
}
console.log(x); // 输出 :10,变量 x 泄露到了全局作用域

// let 的块级作用域
if (true) {
    let y = 20;
}
console.log(y); // ReferenceError: y is not defined

重复声明

// var 可以声明多次
// let 只能声明一次
var a = 1
var a = 2
let b = 3
let b = 4
console.log(a) // 2
console.log(b) // Identifier 'n' has already been declared

变量提升

// var 会变量提升
// let 不存在变量提升
console.log(x); // undefined
var x = 10;
console.log(y); //ReferenceError: y is not defined
let y = 20;

1.2 const关键字

const 关键字用于声明常量,它的作用范围也是在当前的块级作用域内,const 声明的变量是不可变的

// 1. 声明之后不允许改变
// 2. 一但声明必须初始化,否则会报错
const a = 1;
a = 3; //Uncaught TypeError: Assignment to constant variable.

2、箭头函数

学过 java 的小伙伴一定知道 lambda 表达式,与之一样箭头函数提供了一种更简洁的函数定义方式,并且不会绑定自己的 this

// 传统函数
function sum(a, b) {
    return a + b;
}

// 箭头函数
const sum = (a, b) => a + b;

console.log(sum(2, 3)); // 5

// 只有一个参数
const square = x => x * x;
console.log(square(4)); // 16

// 没有参数
const greet = () => 'Hello, World!';
console.log(greet()); // Hello, World!

使用箭头函数需要注意以下几点:

2.1 没有自己的 this 绑定

箭头函数没有自己的 this 绑定,它会捕获其所在上下文的 this 值。对于处理回调函数中的 this 问题非常有用

function Person() {
    this.age = 0;
    // 传统函数需要额外绑定 this
    setInterval(function growUp() {
        this.age++;
    }.bind(this), 1000);
}

function Person() {
    this.age = 0;
    // 箭头函数自动捕获外部 this
    setInterval(() => {
        this.age++;
    }, 1000);
}

2.2 没有 arguments 对象

箭头函数没有 arguments 对象,但可以使用 rest 参数(...args)代替

const showArgs = (...args) => {
    console.log(args);
};

showArgs(1, 2, 3); // [1, 2, 3]

2.3 不能用作构造函数

箭头函数不能使用 new 关键字来实例化对象,因为它没有 [[Construct]] 方法

const Foo = () => {};
const bar = new Foo(); // TypeError: Foo is not a constructor

2.4 没有 prototype 属性

箭头函数没有 prototype 属性,因此不能用于定义类的方法。

const Foo = () => {};
console.log(Foo.prototype); // undefined

3、模板字符串

模板字符串使用反引号定义,可以嵌入变量和表达式。使用 ${} 语法,在模板字符串中嵌入表达式或变量

const name = 'John';
const age = 25;

// 普通字符串拼接
let info = "你好,我的名字是:【"+name+"】,年龄是:【"+age+"】"
console.log(info);

// 模板字符串的写法
let info = `你好,我的名字是:${name},年龄是:${age}`
console.log(info);

4、解构赋值

解构赋值允许从数组或对象中提取值,并赋给变量。

4.1 数组解构

let arr = [1, 2, 3];
//以前获取 通过使用角标  
console.log(arr[0]); // 1

const [a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2

4.2 对象解构

const person = {
    name: "jack",
    age: 21,
    hobby: ['唱', '跳', 'rap']
}
// 解构表达式获取值,将 person 里面每一个属性和左边对应赋值
const {name, age, hobby} = person;
// 等价于下面
// const name = person.name;
// const age = person.age;
// const language = person.hobby;

// 可以分别打印
console.log(name);
console.log(age);
console.log(hobby);

//扩展:如果想要将 name 的值赋值给其他变量,可以如下,nn 是新的变量名
const {name: nn, age, hobby} = person;
console.log(nn);
console.log(age);
console.log(hobby);

5、默认参数

默认参数允许在函数定义时为参数指定默认值,这样可以简化函数的调用,避免出现undefined的情况

function greet(name = 'Guest') {
    return `Hello, ${name}!`;
}

console.log(greet()); // Hello, Guest!
console.log(greet('Alice')); // Hello, Alice!


//还可以使用表达式
function multiply(a, b = 2 * a) {
  return a * b;
}
 
console.log(multiply(5)); // 输出:50
console.log(multiply(5,2)); // 输出:10

6、扩展运算符

展开运算符(...)可以用来展开数组或对象,主要用于将一个可迭代对象(如数组、字符串或类数组对象)展开成多个元素

6.1 数组展开

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5, 6];
console.log(arr2); // [1, 2, 3, 4, 5, 6]

6.2 对象展开

const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };
console.log(obj2); // { a: 1, b: 2, c: 3 }

6.3 字符串展开

const str = 'hello';
const chars = [...str];
console.log(chars); // 输出:['h', 'e', 'l', 'l', 'o']

7、模块化

ES6 模块允许将代码分割成小块,并通过 importexport 进行组织和重用,

7.1 导出模块

使用 export 暴露方法或变量等

// 假设我们有一个名为 math.js 的模块
export function add(a, b) {
    return a + b;
}

export const PI = 3.14;

7.2 导入模块

我们可以使用 import 关键字导入 math.js 模块中的函数和变量

// main.js
import { add, PI } from './math.js';

console.log(add(2, 3)); // 5
console.log(PI); // 3.14

8、Promise

Promise 是一种用于处理异步操作的对象,类似Java中的 CompletableFuture。它可以将异步操作封装成一个 Promise 对象,通过 then() 方法来添加回调函数,当异步操作完成时自动执行回调函数。

const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Success!');
    }, 1000);
});

promise.then((message) => {
    console.log(message); // Success!
}).catch((error) => {
    console.error(error);
});

使用 Promise 对象可以使异步操作的代码更加清晰、简洁,并且可以避免回调地狱的问题。

9、生成器函数

生成器函数使用 function* 语法,可以通过 yield 关键字多次返回值

function* generator() {
    yield 1;
    yield 2;
    yield 3;
}

const gen = generator();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3

定义了一个生成器函数 myGenerator,它包含三个 yield 表达式。我们通过调用该函数得到一个迭代器对象 generator,每次调用 generator.next() 都会执行一次函数体,并返回一个包含 value 和 done 两个属性的对象

总结

ES6 引入了许多新特性和改进,使 JavaScript 更加现代化和强大。通过使用这些特性,开发者可以编写出更加简洁、高效和可维护的代码。这种变化和改进不仅提高了代码的可读性和可维护性,也使得开发者能够更轻松地实现复杂的功能。通过学习和掌握这些新特性,您将能够更加高效地编写 JavaScript 代码,适应现代 web 开发的需求。

最后希望本文对小伙伴们了解 ES6 及其语法有所帮助~ 欢迎一起评论交流!


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

个人网站建设方案书

个人网站建设方案书 一、项目背景 随着互联网的迅猛发展,个人网站已经成为展示个人能力、情感表达的重要平台。无论是个人品牌推广,还是个人作品展示,个人网站都能够为个人提供一个独特的展示空间。因此,建设一个个人网站已经成为…

【AIGC】PULID:对比对齐的ID定制化技术

论文链接:https://arxiv.org/pdf/2404.16022 github:https://github.com/ToTheBeginning/PuLID comfyui节点:GitHub - cubiq/PuLID_ComfyUI: PuLID native implementation for ComfyUI 论文亮点 增加了对比对齐loss和ID loss,最大限度减少…

MoE 大模型的前世今生

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

【TB作品】MSP430G2553单片机读取DS18B20温度传感器,OLED显示

功能 MSP430G2553单片机读取DS18B20 0.96寸 IIC 四针OLED 部分程序 uint temp_value 0; /* 温度 */ int main(void) {unsigned char xianshi[10];WDTCTL WDTPW WDTHOLD; /* Stop WDT */OLED_Init(); /* OLED初始化 *///显示汉字 温度:摄氏度OLED_ShowCHinese(…

Socket编程学习笔记之TCP与UDP

Socket: Socket是什么呢? 是一套用于不同主机间通讯的API,是应用层与TCP/IP协议族通信的中间软件抽象层。 是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面&#…

npm install 出错,‘proxy‘ config is set properly. See: ‘npm help config‘

背景 从远程clone下项目之后,使用命令 npm install 安装依赖,报错如下 意为: 报错: npm犯错!network与网络连通性有关的问题。 npm犯错!网络在大多数情况下,你背后的代理或有坏的网络设置。 npm犯错!网络 npm犯错…

C++基础与深度解析 | 类进阶 | 运算符重载 | 类的继承 | 虚函数

文章目录 一、运算符重载二、类的继承1.类的继承2.虚函数 一、运算符重载 在C中,operator关键字用于重载运算符,使得类的实例可以使用内置的操作符(如、-、*、/等)进行操作。 运算符重载的特性: 重载不能发明新的运算…

Fast-Retry:一个支持百万级多任务异步重试框架【送源码】

前言 假设你的系统里有100万个用户,然后你要轮询重试的获取每个用户的身份信息, 如果你还在使用SpringRetry和GuavaRetry 之类的这种单任务的同步重试框架,那你可能到猴年马月也处理不完,即使加再多的机器和线程也是杯水车薪,而F…

6.4 cf E(题目难理解)

Problem - E - Codeforces 翻译: 小车在0点,时间为0时开始移动,从0,a1,a2......ak有k1个标志点,对应的时间为0,b1,b2...bk 在任意两个标志间,小车以匀速行驶,所以 vai1​−ai​​…

SpringBoot 统一返回格式

目录 一、为什么要统一返回? 二、全局异常处理代码 三、统一返回对象代码 四、使用方法 五、结果展示 一、为什么要统一返回? 在Spring Boot应用中,为了保持API接口的响应格式统一,通常会采用全局异常处理和自定义返回对象的方…

Sd-CDA (自退化对比域适应框架):解决工业故障诊断中数据不平衡问题

现代工业故障诊断任务常常面临分布差异和双不平衡的双重挑战。现有的域适应方法很少关注普遍存在的双不平衡问题,导致域适应性能差或甚至产生负面迁移。在这项工作中,提出了一种自降级对比域适应(SdCDA)诊断框架,用于处…

如何实现单例模式及不同实现方法分析-设计模式

这是 一道面试常考题:(经常会在面试中让手写一下) 什么是单例模式 【问什么是单例模式时,不要答非所问,给出单例模式有两种类型之类的回答,要围绕单例模式的定义去展开。】 单例模式是指在内存中只会创建…

Nginx location 与 Rewrite

Nginx正则表达式 location 通过前缀或正则匹配用户的URL访问路径做页面跳转、访问控制和代理转发 location 大致可以分为三类: 精准匹配:location / {...} 一般匹配:location / {...} 正则匹配:location ~ / {...} location…

外汇天眼:Bitpanda 扩大与德意志银行的合作

金融科技独角兽Bitpanda正在扩大与德意志银行的合作,为德国用户提供实时支付解决方案,以处理进出交易。 这种基于API的账户解决方案将使Bitpanda能够访问德国的IBAN账户,优化和增强用户体验,同时确保信任、速度和效率。 这只是Bi…

通过仪器分类方式修订看监测仪器发展新趋势

随着科技的进步和监测需求的不断升级,监测仪器的分类方式亟需与时俱进。本文旨在探讨《混凝土坝监测仪器系列型谱》中对现有仪器分类方式的修订,以及监测仪器发展的新趋势相关内容。 一、仪器分类方式的修订 传统的仪器分类方式往往基于功能、原理或应用…

太极图形课——渲染——光线追踪实战第一部分呢

根据概念部分我们逐步通过太极实现光线追踪 总共可以分为5步 第一步:如何发射出一道光? 首先明确何为一道光,光从我们眼睛(摄像机)射出,那么在三维虚拟世界里,我们可以认为这道光就是一条射线…

【微信小程序】事件绑定和事件对象

文章目录 1.什么是事件绑定2.button组件3.事件绑定4.input组件 1.什么是事件绑定 小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过on的方式绑定事件,也没有click等事件,小程序中 绑定事件使用bind方法,c…

6个音效、配乐素材网站,免费可商用

视频剪辑必备的6个音效、配乐素材网站,免费下载,剪辑师们赶紧收藏! 1、菜鸟图库 音效素材下载_mp3音效大全 - 菜鸟图库 菜鸟图库音效素材免费下载。站内不仅有大量音频素材,还有很多设计、办公、图片、视频等素材。音频素材全部都…

2024年端午节放假通知

致尊敬的客户以及全体同仁: 2024年端午节将至,根据国务院办公厅通知精神,结合公司的实际情况,现将放假事宜通知如下: 2024年6月8日(星期六)至6月10日(星期一)&#xff…

Linux文本处理三剑客之awk命令

官方文档:https://www.gnu.org/software/gawk/manual/gawk.html 什么是awk? Awk是一种文本处理工具,它的名字是由其三位创始人(Aho、Weinberger和Kernighan)的姓氏首字母组成的。Awk的设计初衷是用于处理结构化文本数…