JS-ES6

深入浅出ES6:现代JavaScript的基石 ES6为JavaScript带来了许多强大的新特性,使代码更简洁、易读和易于维护。掌握这些特性对于任何JavaScript开发者都至关重要。本文只是对ES6的一些核心特性进行了简要介绍,建议你深入学习并实践这些特性,以提升你的JavaScript开发技能。 阅读详情
AI摘要

本文围绕ES6展开,介绍其是JavaScript的重大更新,带来诸多新特性。详细阐述了ES6的变量(let和const)、模板字符串、解构表达式、箭头函数、rest和spread、对象创建与拷贝、模块化处理等内容,还提及了对象的深拷贝和浅拷贝方法。

ES6

简介

ECMAScript6,简称ES6,是javaScript语言的一次重大更新,ES6带来了大量的新特性,包括箭头函数、模板字符串、let和const关键字、结构、默认值参数、模块系统等等Vue3中大量使用了ES6语法

ES6的变量和

n 模板字符串

let和const
  • let声明的变量
    • 不能重复声明
    • 有块级作用域,非函数的花括号遇见let会有块级作用域
    • 不会预解析进行变量提升
    • 定义的全局变量不会作为window的属性
  • const声明的常量
    • 用于常量声明,一旦赋值就无法从新赋值相当于java中的final
    • 其余特性与let相同

变量提升:执行代码时将变量和函数的声明提升到它们作用域的顶部,使得域内均可访问这些变量和函数,但是赋值操作不会被提升

模板字符串
  • 模板字符串运行在字符串中嵌入常量,使用反引号包裹,变量使用${}包裹
let name = "Alice";
let age = 30;
let greeting = `Hello, my name is ${name} and I am ${age} years old.`;
console.log(greeting);

ES6的解构表达式

ES6的结构赋值是一种便捷的语法,可以快速将数组或对象中的值拆分并赋值给变量。解构赋值的语法使用花括号{}表示对象,方括号[]表示数组

数组解构
let [a, b] = [1, 2];
console.log(a); // 输出 1
console.log(b); // 输出 2
对象解构
//在对象结构时,是通过变量名来进行赋值的,而不是顺序
let { x, y } = { x: 1, y: 2 };
console.log(x); // 输出 1
console.log(y); // 输出 2
默认值
let [a = 1, b = 2] = [3];
console.log(a); // 输出 3
console.log(b); // 输出 2
剩余项
let [a, ...rest] = [1, 2, 3, 4];
console.log(a); // 输出 1
console.log(rest); // 输出 [2, 3, 4]
嵌套结构
let { x, y, z: { a, b } } = { x: 1, y: 2, z: { a: 3, b: 4 } };
console.log(x); // 输出 1
console.log(y); // 输出 2
console.log(a); // 输出 3
console.log(b); // 输出 4

ES6的箭头函数

箭头函数不能用作构造函数(不能使用new关键字实例化),也不能使用arguments对象,但可以使用rest参数(…args)来代替。箭头函数的作用域是词法作用域,它们继承父级作用域的this值。

// 传统函数表达式
const traditionalFunction = function (a, b) {
  return a + b;
};

// 箭头函数
//方法体中只有一行代码{}可以不写
const arrowFunction = (a, b) => a + b;

// 无参数箭头函数
const greet = () => {
  return "Hello!";
};

// 单参数箭头函数
//参数列表中有且只有一个参数()可以不写
const square = x => x * x;

// 多行箭头函数
const multiLineArrowFunction = (a, b) => {
  const sum = a + b;
  return sum;
};

// 使用箭头函数作为回调函数
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map(x => x * x);

ES6的rest和spread

Rest参数

Rest参数允许将不定数量的参数表示为一个数组。在函数声明中,用三个点(…)来表示rest参数。

function sum(...args) {
  return args.reduce((acc, val) => acc + val, 0);
}

console.log(sum(1, 2, 3, 4)); // 输出 10

//在这个例子中,sum函数使用rest参数...args来接收传递给函数的所有参数,并将它们作为一个数组来处理。
Spread操作符

Spread操作符允许在函数调用/数组字面量/对象字面量中展开数组或对象。在这种情况下,用三个点(…)来表示spread操作符。

在函数调用中使用Spread操作符

function multiply(x, y, z) {
  return x * y * z;
}

const numbers = [1, 2, 3];

console.log(multiply(...numbers)); // 输出 6

//在这个例子中,multiply函数接受三个参数,我们使用spread操作符将数组numbers中的元素展开作为函数的参数。

在数组字面量中使用Spread操作符

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];

console.log(arr2); // 输出 [1, 2, 3, 4, 5]

//在这个例子中,我们使用spread操作符将一个数组展开到另一个数组中。

在对象字面量中使用Spread操作符

const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };

console.log(obj2); // 输出 { a: 1, b: 2, c: 3 }


//在这个例子中,我们使用spread操作符将一个对象展开到另一个对象中。

ES6的对象创建和拷贝

对象创建的语法糖

对象字面量的增强
ES6允许在对象字面量中直接使用变量名作为对象的属性名,而不需要重复书写。例如:

let name = 'Alice';
let age = 30;

let person = { name, age };

计算属性名
ES6允许在对象字面量中使用表达式作为属性名。例如:

let propKey = 'foo';
let obj = {
    [propKey]: 'bar'
};

对象解构赋值
ES6允许从对象中提取属性,将属性赋值给变量。例如:

let { x, y } = { x: 1, y: 2 };

Object.assign
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象。这样可以方便地合并对象的属性。

let obj1 = { a: 1 };
let obj2 = { b: 2 };
let mergedObj = Object.assign({}, obj1, obj2);

对象方法简写
ES6允许在对象字面量中使用简写方法名。例如:

let obj = {
    method() {
        return 'Hello';
    }
};
对象的深拷贝和浅拷贝

浅拷贝是创建一个引用,深拷贝是创建一个新的对象

浅拷贝(Shallow Copy)
浅拷贝是指创建一个新对象,新对象的属性值和原始对象的属性值相同,但如果属性值是对象,新对象和原始对象的属性值将引用同一个对象。换句话说,浅拷贝只复制对象的第一层,而不会复制嵌套对象。

在 ES6 中,可以使用对象展开运算符(Spread Operator)或Object.assign()方法来进行浅拷贝,例如:

// 使用对象展开运算符进行浅拷贝
const originalObj = { a: 1, b: { c: 2 } };
const shallowCopy = { ...originalObj };

// 使用Object.assign()进行浅拷贝
const shallowCopy2 = Object.assign({}, originalObj);

深拷贝(Deep Copy)
深拷贝是指创建一个新对象,新对象的属性值和原始对象的属性值完全独立,包括嵌套对象。换句话说,深拷贝会递归复制所有层级的属性,确保新对象和原始对象完全独立。

在 ES6 中,实现深拷贝比较复杂,可以使用第三方库(如Lodash的_.cloneDeep()方法)或自行编写递归函数来实现。以下是一个简单的深拷贝示例:

function deepCopy(obj) {
    if (typeof obj !== 'object' || obj === null) {
        return obj;
    }

    const newObj = Array.isArray(obj) ? [] : {};

    for (let key in obj) {
        newObj[key] = deepCopy(obj[key]);
    }

    return newObj;
}

const originalObj = { a: 1, b: { c: 2 } };
const deepCopiedObj = deepCopy(originalObj);

ES6的模块化处理

无论何种方式导入,导入的内容都会被当成一个对象处理
在导入和导出的时候可以用解构表达式批量导出/导入

导出(Export)

命名导出(Named Exports):

// 导出单个变量或函数
export const myVar = 10;
export function myFunction() {
    // 函数代码
}

默认导出(Default Export):

// 导出默认值,若不指明则默认会导出
//默认导出在一个js只能导出1个
const myVar = 10;
export default myVar;
导入(Import)

导入命名导出:

// 导入单个变量或函数
import { myVar, myFunction } from './myModule';

导入默认导出:

// 导入默认值
import myVar from './myModule';

混合导入(Mixing Named and Default Exports):

// 导入默认值和命名导出
import myVar, { myFunction } from './myModule';

导入所有导出:

// 导入所有导出
import * as myModule from './myModule';

动态导入(Dynamic Import):

// 动态导入模块
const module = await import('./myModule');

使用模块化处理:

// 在文件中使用导入的变量或函数
//这里使用了解构表达式
import { myVar, myFunction } from './myModule';
console.log(myVar);
myFunction();
JavaScript、ECMAScript、ES6的区别 1、什么是JS(JavaScript) JS(JavaScript) 是由 ES(ECMAScript)、DOM(浏览器文档对象)、BOM(浏览器对象模型) 组成。 2、ECMAScript和JavaScript的关系     1996年11月,JavaScript的创造者Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这种语言能够成为国际标准。     次年,ECMA发布262号标准文件(EC 阅读详情

相关推荐

ENVI5.6 批量处理GF-2/GF-6/GF-7:从安装到融合的完整自动化流程

本文详细介绍了ENVI5.6环境下批量处理GF-2/GF-6/GF-7卫星数据的完整自动化流程,包括环境配置、工具安装、正射校正、图像融合等关键步骤。通过实战案例和优化技巧,帮助用户高效完成高分卫星影像处理,提升工作效率。特别针对GF-6和GF-7的特殊处理要点进行了深入解析。

weixin_42546392的博客 179

ES6(JS)

ES6(JS)笔记

Yes_You_Can 的博客 1万+

告别混乱!在Unity中为Best MQTT v3设计清晰的服务层:配置、连接、订阅发布模块拆分指南

本文详细介绍了如何在Unity中使用Best MQTT v3插件构建清晰的服务层架构,包括配置管理、连接服务、订阅管理和发布服务的模块化拆分。通过解耦设计、事件驱动和接口抽象,提升代码可维护性和可测试性,适用于物联网和实时通信开发场景。

weixin_30576827的博客 357

js中的ES6

人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成世界超级大师的必要条件。——格拉德威尔《一万小时定律》

zouzxxi的博客 2869

从特斯拉到蔚来:拆解主流智能汽车的车联网架构,看它们如何实现‘车、路、云’协同

本文深度解析了特斯拉、蔚来等主流智能汽车的车联网架构,详细拆解了其‘车、路、云’协同的技术实现。从车内网络、车际通信到云端协同,分析了通信技术、系统架构等关键技术选择,揭示了不同厂商如何通过差异化布局构建竞争优势。

weixin_42525289的博客 580

【CV论文精读】【协同感知综述】Collaborative Perception for Autonomous Driving :Current Status and Future Trend

感知是自动驾驶系统的关键模块之一,近年来取得了很大进展。然而,单个车辆的有限能力导致感知性能提高的瓶颈。为了突破个体感知的局限,协作感知被提出,它使车辆能够共享信息来感知视线和视野之外的环境。本文综述了有前途的协作感知技术的相关工作,包括介绍了基本概念,概括了协作模式,总结了协作感知的关键要素和应用。最后,我们讨论了这一研究领域面临的挑战和问题,并给出了一些潜在的进一步方向。

weixin_44184852的博客 4689

JavaScript高级——ES6基础入门

ES6(ECMAScript 6),也被称为ES2015,是JavaScript的第六个版本.它于2015年发布,并在现代JavaScript开发中扮演了重要的角色.看千遍,不如自己动手写一遍遇到问题不要怕,微笑着面对它记笔记。

明哥 1万+

CH32V IAP跳转避坑指南:为什么你的APP跳不过去?从mstatus寄存器配置到函数属性详解

本文深入解析CH32V系列MCU的IAP跳转机制,从mstatus寄存器配置到函数属性优化,详细讲解如何避免APP跳转失败。文章涵盖地址准备、模式切换、跳转执行等关键步骤,并提供调试技巧与实战案例,帮助开发者快速解决CH32V IAP跳转中的常见问题。

weixin_30955617的博客 139

js总结篇之—ES6 (看完你就学会整个js)

1.ECMAScript ## 介绍 * 一般来说ECMAScript可以认为是javascript * javascript对ECMAScript进行了扩展 ### javascript组成 * ECMAScript(核心) * 扩展-->浏览器端 * DOM * BOM * 扩展-->服务器端 * NODEJS ## ES版本变化 1. ES5 发布于2009年 2. ES6 发布于2015年 3. ES7 发布于2016年 2.数组函数的扩展 * Array.prot

Sakura1921的博客 6250

ARFoundation系列讲解-教程目录

一、教程目录 ARFoundation快速入门-01简介 ARFoundation快速入门-02环境搭建 ARFoundation快速入门-03环境配置之iOS ARFoundation快速入门-04环境配置之Android ARFoundation快速入门-05ARKit设备支持列表 ARFoundation快速入门-06ARCore设备支持列表 ARFoundation快速入门-07检查设备支持 ARFoundation快速入门-08平面检..........

a451319296的博客 3万+

USB 基础学习:USB 电气信号介绍

USB电气信号技术解析 USB通信的核心是差分信号传输技术,通过D+和D-两根线传输相位相反的电压信号实现数据通信。USB信号系统包含三类关键信号:差分数据信号(抗干扰性强)、单端状态信号(用于设备识别)和电源信号(提供5V供电)。USB2.0采用400mV电压摆幅和NRZI编码,支持低速(1.5Mbps)至高速(480Mbps)传输;USB3.0则新增专用差分对,数据速率可达20Gbps。物理层通过上拉/下拉电阻检测设备连接,高速模式需特殊握手协议。抗干扰设计的关键在于保持差分线等长、阻抗匹配和使用共模扼

浩瀚之水的专栏 1782

ES6与JavaScript之间的关系

js与node.js JS是由ES(ECMAScript)、DOM(浏览器文档对象)、BOM(浏览器对象模型)组成。 其中Node.Js就只有ES,目前浏览器比较流行的版本就是ES6(ES2015),老浏览器的版本基本上都是ES5。所以alert和document不能在Node运行(因为Node没有dom和bom)。 ECMAScript 6简介 ECMAScript 6.0(以下简称ES6)是J...

qq_43542074的博客 5601

基于Jeecgboot3.9.0的文档管理系统(四)

基于Jeecgboot3.9.0的文档管理系统(四)

宁波阿成的博客 251

【JS笔记】JavaScript语法快速上手— ES5和ES6(五)

【JS笔记】JavaScript语法 快速上手— ES5和ES6(五)

leo的博客 991

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【 javascript】JS语法 ES6、ES7、ES8、ES9、ES10、ES11、ES12新特性

本文集合了 ES6 至 ES11 常用到的特性,包括还在规划的 ES12,只列举大概使用,详细介绍的话内容量将十分巨大.。PS:使用新特性需要使用最新版的 bable 就行转义。

weixin_55846296的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JavaScript 与 ES5 与 ES6 与 Node.js 之间的关系

参考自:https://es6.ruanyifeng.com/#docs/intro JavaScript 由Netscape 公司创造,1996 年 11 月,决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。之后,由ECMA发布的JavaScript就叫做ECMAScript了,简称ES。 1、ECMAScript 和 JavaScript 的关系 ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。 2、ES.

青蛙king的博客 1089

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ES5 vs ES6:JavaScript 演进之路

ES5 vs ES6:JavaScript 演进之路

qq_20236937的博客 1803

从脚本到工程化:ES5 与 ES6 重塑 JavaScript 的十年

JavaScript经历了从ES5到ES6的重大变革:ES5(2009)为JS建立了基本规范,引入严格模式、数组方法、JSON支持等基础功能,使其从松散脚本迈向工程化雏形;而ES6(2015)则带来let/const、模块化、箭头函数等现代化特性,彻底解决了作用域、异步编程等核心问题。两个版本共同塑造了现代JavaScript——ES5奠定基础规范,ES6提供工程化能力,使JS从简单的网页脚本进化为支持大型应用开发的成熟语言。如今ES6已成为前端开发标配,但其核心思想仍建立在ES5的基础之上。

qq_43548436的博客 1171

JavaScript模块化——ES6模块化规范

ES6模块化规范

PleaSure乐事的博客 962

Flare-JS:基于Canvas的JavaScript ES6运行时

Flare-JS:基于Canvas的JavaScript ES6运行时 项目介绍 Flare-JS 是一个基于JavaScript ES6的运行时库,专注于使用Canvas进行图形渲染。它提供了两种渲染方式:一种是使用CanvasKit(通过WebAssembly实现的Skia库),另一种是使用标准的CanvasRenderingContext2D。目前,CanvasKit渲染方式是主分支,而co...

gitblog_00574的博客 911

javascript 语言标准 es6简介

目录 1.ES6是什么鬼? 2.ECMAScript 和 JavaScript 的关系 3.ECMAScript 的历史 1.ES6是什么鬼? ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 2.ECMAScript 和 JavaScript 的关系 一个常见的问题是,ECMAScript 和 JavaScript

whatday的专栏 1653

Javascript》》JS》》ES6》》总结

回调地狱问题 Fetch API 浅拷贝 深拷贝 事件循环机制、宏任务、微任务 Import 执行的时机 对象、数组简写方式 var 、let、Const object.create 、 object.defineProperty 组合模式 观察模式 模拟接口 注释描述接口 属性检测接口 鸭式辩型接口 继承模式 函数聚合的三种实现方式 模块、闭包 对象 的属性名 在何时使用obj[‘属性名‘] 计算属性名 创建 ’类‘ 、实例 、原型对象关系,以及 构造函数 new 和不new spread展开运算符 re

Kaizen的博客 367

ES6中JS类实现的解读

在ES5及以前版本,是没有真正意义上类的概念,只是通过构造函数来模拟类的运用。尽管JS脚本语言是一门解释型弱语言,对类的需求意义不大,但ES6还是引入类的实现,让JS真正够上面向对象编程门槛,尽管对类的功能实现还不全面、彻底,但基本面向对象编程功能具有了。

m0_74157361的博客 2270

JavaScript之 ES6 - ES11新增语法

由上一章可知javaScript = ECMAScript + DOM +BOMECMA 是欧洲计算机制造商协会(European Computer Manufacturers Association)的缩写。该协会成立于 1961 年,是一个旨在促进欧洲计算机行业发展的标准化组织。它在计算机技术和相关领域制定了许多重要的标准,其中最著名的是与编程语言和脚本语言相关的标准,以下是一些具体介绍:ECMA - 262:这是由 Ecma 国际发布的标准文件,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAS

xrkhy的博客 704
上一篇: Ajax概述
下一篇: vue3简介与快速使用
sisyphoslee
博客等级 码龄7年 942粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值