JavaScript(ES6进阶部分)

JavaScript(ES6进阶部分)

简介

  • ES6泛指从2015年之后的所有ES版本,含义就是5.1版本以后JS的下一代标准
  • ++ES是JS的规格,JS是ES的实现++
  • 标准委员会(TC39委员会)
    • 批准修改语法,使其从提案变成正式标准
      %% ES6带来了许多新特性,之后要学的的命令、扩展、对象、继承都是新特性,学完这些新特性咱就开始搞Vue架构了,加油!

Nodejs环境

我们写ES6是为了使其运行在浏览器上,但是ES6有一些新特性需要我们转码,把ES6代码转化成ES5代码再运行到浏览器当中

++因为现在有些浏览器对ES6支持性不是特别好++代码转化我们就需要安装Nodejs环境

  • Nodejs主攻服务器方向可以用JS完成服务器代码的编写
    %% 原本JS只能写写前端,后端服务器部分需要另外的语言写,Nodejs是基于 Chrome V8 引擎的 Javascript 运行环境, Node.js 出现之后,JS 前后通吃
  • Nodejs会附带一个npm命令,npm是Node的包管理工具::它的简单结构有助于Nodejs生态系统的激增,现在npm有超过一千万个自由使用的开源库包,用处特别广泛!++Nodejs可以看成一个庞大的代码仓库++
  • 但我们直接用npm下载比较慢,因为正版的npm的资源在国外,但我们的网是国内的网,所以建议使用npm镜像++已经下载好了,我们以后用的npm命令下载改成cnpm命令就行了++
  • 目前咱不讲node,只需要把cnpm搞出来就好了
  • API(Application Programming Interface)是应用程序编程接口,简称接口

Babel转码器:ES6->ES5

Babel 是一个 JavaScript编译器。主要用于将高版本的JavaScript代码转为向后兼容的JS代码,从而能让我们的代码运行在更低版本的浏览器或者其他的环境中。

安装流程

  1. 安装:注意要安装在项目的根目录之下,在vscode中选中文件,右键在集成终端中打开::弹出的对话框就是我们的cmd终端::,命令cnpm install --save-dev @babel/core安装Babel
  2. 配置文件:在node_modules之下新建文件.babelrc,再加一些规则
  3. 安装转码规则::Babel本身是不具有转码功能的,我们目前学的比较笼统::
  4. 再在.babelrc中添加规则
  5. 再tm安装命令行工具

对ES6转码

  • 转码结果输出到标准流当中::这里的标准流在终端能够看到::在命令行中用npx babel example.js就可以在终端中看到转化后的ES5代码++做不出来,放弃了,反正不常用++
  • 我草泥马根本转化不过来卧槽泥马勒戈壁!!!!

命令

Let命令

  • 用法类似于var,但是所声明的变量只在let命令代码块内有效
    • var函数级作用域,var所声明的变量在var所在函数内++也就是说,除非是有函数把var包围,变量只属于该函数,其他情况之下var的变量可以任意使用++
    • let块级作用域,范围就是块(花括号)。在for循环中很适合使用let,因为不同函数早已超过块级作用域,我们可以在每个for中都let i = 0不用去担心 i 会不会重复
    • var可以重复声明同一个变量,如果是var a;::那么不会对原来产生任何影响,但也不会造成任何错误::如果是var a = 300;那么效果就是重新赋值!
  • let不存在变量提升,不允许(在同一个花括号中)重复声明!!!{let a;var a;}也是错误的,let已经把a占有了,不允许重复声明

Const命令

  • 一旦声明,不可改变!必须立刻初始化!!!
  • Constlet作用域相同,变(常)量都不提升,不可重复声明

对象解构赋值

解构赋值是很大的概念,数组、字符串等都有,只不过应用的很少,本次我们主要讲对象的解构赋值

  • 对象的解构赋值用于++频繁使用对象的成员++,相当于同时设置了许多变量,每个变量都承载着对象成员的值,使用时就不用user.name了,直接name甚至更简单,减小我们重复的代码量
  • 用法:const{name,age} = user;::let也行,建议使用const::,user的name``age属性没有次序,变量必须与属性同名才能取到正确的值,与变量的顺序没有任何关系
  • 这个在我们了解对象之后简直起飞,平常用到的console.log()其实就是console对象的方法,解构赋值不仅可以传值还可以传递方法::之前学的Date/Math等等都可以用啊::
    • 但是注意,如果我们先前声明了某个变量,并且变量与被解构对象的成员或者方法重名,那么会报错。一定注意声明的变量名。
    • 上述情况之下,我们把const/let去掉,在最外面加一个()就完美解决,比如:😦{name,age}=user);但是很麻烦也不好看,不建议!::

扩展(新增功能)

字符串扩展

  • 字符串对Unicode有了更好的支持
    • Unicode:统一码、万国码、单一码,是计算机领域的一项业界标准。为每种语言设定了统一并且唯一的二进制编码,以满足跨语言、跨平台的交流::100%兼容::
  • 字符串的遍历器接口
    • for...of循环遍历字符串
    • for(let i of str){console.log(i)}直接就能打印每一个字符
  • 模板字符串(template string)::使用率高高的::
    • 增强版的字符串,用反引号``标识,既可以当成普通字符串使用,也可以在字符串中嵌入变量这个看vs吧
    • 变量的嵌入用到${},剩下不变的字符都当作模板了

字符串新增方法(提供更加优质的开发体验)

  • includes()/startsWith()/endsWith()
    • includes():返回布尔值,是否包含,包含就返回true
    • startsWith():返回布尔值,表示是否以参数字符串开头,endsWith()同理
    • 三者都支持参2,表示开始搜索的位置。这三者就是indexOf()方法的详细版本,更有针对性
  • repeat()
    • 返回一个重复好多次的新字符串++参数为字符串重复的次数,若为0则返回空字符串++
  • padStart()/End()长度补全功能
    • 参数1是设置的长度,参数2是填充的字符串。padStart()用于补全头部,另一个补全尾部
    • ::如’x’.padStart(4,‘ab’)结果就是’abax’::
  • trimStart()/End():前后去掉空格++返回的都是新字符串,不会修改原始字符串++
  • at()
    • 接受一个整数作为参数,返回参数指定位置的字符,::和STL容器中的作用是一样的::
    • 支持++负索引,从右往左开始++
    • 如果参数位置超过字符串,则返回undefined
      JS中的字符串方法是不会改变原来字符串的!

数组扩展之扩展运算符(…/spread)

  • …+数组
    • 将一个数组分割成参数序列,本质是由逗号隔开,打印时由空格隔开
    • ++比如(…[1,2,3])会打印出1 2 3++
  • 替代函数的apply()方法
    • 比如我们要找到数组的最大值,一用算法,二用Math.max.apply(null,arr)++这里的apply就是把Math.max这个方法借用到数组中去++
    • Math.max用法是Math.max(10,20,30);后者恰好是扩展运算符分割后的数组
  • 合并数组
    • 之前的方法是arr1.concat(arr2)
    • 现在直接用[...arr1,...arr2],也可以用前面的,::后面应该会有消耗的区别::

数组扩展之新增方法

Array.from():将类数组转为真正的数组

类数组/伪数组:arguments、元素集合、类似数组的对象,只能使用数组的++读取方式[0/1…]和length属性,不能使用数组方法++

  • arguments
    • 调用函数时我们可以在原函数没有参数的时候主动传递参数,原函数可以使用arguments读取额外传递过来的参数,形式如10,20,30
  • 元素集合:NodeList之前仔细讲过
  • 类似数组的对象:
    • 键的形式是::‘0’,‘1’,‘2’…::和数组的下标很像,可以像数组一样user['0']去读取
    • ++因为有引号,所以没法user.‘0’,只能像数组一样读++
  • Array.from(类数组名)直接变成数组,很简单::也不改变原来伪数组的形式::
Array.of():将一组值转为数组
  • 参数就是10,str,30任意搭配,可以新建变量承接数组
Array():数组的构造函数
  • 后面直接跟参数1,表示开辟长度为参数1的空的数组空间

对象扩展

属性简洁表示法
  • 键值对:
    • 如果值是已声明的变量,并且键值名相同,:和后面的值就可以省略
    • 比如name:name,...可以省略为name,
  • 函数:
    • 不用写get:function(){}这么麻烦了,直接写成独立的函数,函数的键可以省略::但是记得取个名字::
    • 比如get(){}
属性名表达式
  • 允许定义对象时,用**[ 表达式 ]**作为对象的属性名
  • 比如[property]:rich
扩展运算符(…)
  • 拆解对象,就是去掉对象和{ },注意这时不能进行控制台打印会报错

函数扩展:箭头函数

  • 用法:
    • var fn = (参数) => 返回值++函数代码只有一条返回时++注意,如果**返回值是对象,则应在对象的外面加一层()**否则会报错
    • var fn = (参数) =>{全部函数体}++函数体代码比较多的时候使用++
  • 最常用的情况是回调函数(匿名函数),就是一个函数没有名字
  • 指向:
    • 前提:++函数在对象里++
    • 箭头函数没有this如果在箭头函数中用到this那就纯纯指向上一层的变量::指向能力比较菜,但是方法完全不影响它的指向::
    • 普通函数this是指向对象,但是它**一旦遇到像setTimeout()这种指向windows**的方法,它的指向也会改变,指向之外的windows中的变量(是跨过对象指引的)::容易受方法指向的操控::
    • 所以如果我们想在setTimeout()中用到对象中的成员,就必须用箭头函数或者*函数之前var that = this;的方法

Set数据结构

属性

  • 类似于数组,但是成员的值必须是唯一的,不允许重复++当然了,如果咱给Set重复的值,它不报错,自动去重++
  • 创建:
    • Set本身就可以用作构造函数::像数组的Array( )一样::
    • 创建集合:搭配new关键字,const s = new Set();创建的形式是唯一的
  • 参数:
    • 数组:const s = new Set([1,2,3,4]);,也支持[...set]扩展运算符,扩展之后是1,2,3,4,再加[]就又成为数组
    • 字符串:new Set('abcde');
  • 去重(去掉重复的元素):
    • 数组:[...new Set(arr)]先把数组的值给集合,再让集合自动去重,此时因为Set集合不是数组所以要把Set扩展再形成数组
    • 字符串:[...new Set('abbcde')].join('');join是把数组转换成字符串
  • Set加入值的时候,不会发生类型转换,所以5和“5”属于两个不同的值
  • size属性:返回集合中的成员个数

方法

  • add():添加成员
  • delete():删除成员
  • has():返回布尔值,判断参数的内容是否在集合中
  • clear()清除所有的成员,没有返回值,没有参数

Promise对象(异步/网络请求)

基本概念

  • Promise是异步编程的解决方案
  • 从语法上讲,Promise是一个对象,我们可以从中获取异步操作的消息
  • Promise提供统一的API
  • 简单来说Promise就是一个容器,保存着某个未来才会结束的事件(通常是异步操作)的结果。
    %% 异步操作,在前端往往变成
    网络请求
    。什么是未来结束?就是说这件事比较消耗时间,为了不耽误其余工作,我们让它自己执行,执行好了再告诉我们一声,Promise就是能更好地告诉我们一声。
  • Promise对象我们就可以将异步操作以同步操作的流程表达出来,避免了之前传统的层层嵌套的回调函数

基本用法

Async(异步)函数

Async可以将异步操作变成同步操作,比较常见的异步操作就是setTimeout()定时器,::遇到定时器不管有没有成功,结果我不管,继续往下执行::

++这个函数的作用就是:让异步操作不要脱离大队,所有操作都要等待异步操作完成之后再继续进行,保证了执行顺序就是实际效果的顺序++用法:
async function asyncPrint(time,value){ await timeout(time);
console.log(value); }

  • 与普通函数的区别就是最前面加了async,后面加了await
  • 这里的timeout()是带有定时器的异步操作,我们要在异步操作前加await关键字::很形象,所有操作必须要等待它::
  • 网络请求之间有依赖关系,很多接口可能要依赖遇上一个接口的数据才能执行,所以Async具有很大的应用场景

Class类

基本语法

  • 和传统语言的类很像!是class Person{ }而且内部函数之间不用写,
  • constructor(){}是类的默认构造函数,一个类必须要有constructor++如果没有显示定义,则填补默认构造函数+
  • 类的实例生成一定要通过new方法
  • 不存在类的提升!!!必须先定义后使用!!!

属性与方法:分为实例(局部)和静态

  • 实例方法:通过new出来的实例对象调用的方法
  • 实例属性:类的实例对象可调用的属性
  • 静态
    • 和之前的一样,前面加static。唯一不同的一点是,我们之前调用静态函数都是::,这里直接用类名.静态方法的形式
    • 如果静态方法出现this,那么它指向的就是整个类

继承

  • extends替换原来的:public
  • 构造函数有变动
    • ++因为我们之前学的构造函数是有独特的名字,所以系统支持一些东西,但ES6有些不支持++
    • 还是写成constructor(){}参数(包括父类)都要写上,并且在构造函数中加**super(父类构造函数的参数);**表明父类的初始化变量才行

Module(模块)

Module:帮助我们管理JS中文件与文件之间的关系JS需要模块体系把一个大程序拆分成相互依赖的小文件,再用简单的方法拼装起来

  • 通过export::导出::和import::导入::命令完成模块
    • export var year = 2022;/export function(){}在一个文件中导出
    • export定义了模块的对外接口后,其他的JS文件就可以通过import命令加载这个模块
    • import{year,...}from 文件名:导入别的文件
      • 如果想在别的文件中修改变量的名字,可以在{ }中用MySQL的方式value as val使用as关键字
      • 也可以用星号全部调用,但只能以对象的形式import * as 对象名 from 文件名,调用成员时和对象一样使用就好
  • export default:
    • 使用前两个命令的时候,我们必须清除变量或者函数的名字,但是,用户懒得记而且用的少,我们可以使用export default命令
    • 该命令用于函数和类,我们不用在乎我们导出的这俩叫什么名字,在import中可以任意起一个名字接着用
    • 注意,export default只支持一个函数或类!

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

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

相关文章

服务器数据恢复-误操作导致xfs分区数据丢失的数据恢复案例

服务器数据恢复环境: 某品牌OceanStorT系列某型号存储MD1200磁盘柜,组建的raid5磁盘阵列。上层分配了1个lun,安装的linux操作系统,划分两个分区,分区一通过lvm进行扩容,分区二格式化为xfs文件系统。 服务器…

ref和$refs,$nextTick异步更新

目录 ref和$refs $nextTick 异步更新 ref和$refs 1.作用 利用ref 和$refs可以用于获取dom元素或组件实例 2.特点 查找范围→当前组件内(更精确稳定) 3.语法 1.给要获取的盒子添加ref属性 <div ref"chartRef">我是渲染图表的容器</div> ⒉.获取时…

深入了解C编译管道

文章目录 引言1. 预处理阶段2. 编译阶段3. 汇编阶段4. 链接阶段5.流程图结论 引言 C编译管道是软件开发中至关重要的工具&#xff0c;它负责将C语言源代码转换为可执行的机器代码。理解C编译管道的工作原理有助于提高代码的可读性、可维护性&#xff0c;并有助于优化生成的可执…

css画三角形

css画三角形 <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"&g…

利用快手的用户数据和精准营销提升电商平台用户转化率和销售额

一、快手用户数据的价值 快手作为国内领先的短视频平台&#xff0c;拥有庞大的用户群体和丰富的用户行为数据。这些数据包括用户的观看习惯、互动行为、兴趣偏好等&#xff0c;对于电商平台来说具有极高的商业价值。通过分析这些数据&#xff0c;电商平台可以深入了解用户需求…

芯科科技以卓越的企业发展和杰出的产品创新获得多项殊荣

2023年共获颁全球及囯內近20个行业奖项 Silicon Labs&#xff08;亦称“芯科科技”&#xff09;日前在全球半导体联盟&#xff08;Global Semiconductor Alliance&#xff0c;GSA&#xff09;举行的颁奖典礼上&#xff0c;再次荣获最受尊敬上市半导体企业奖&#xff0c;这是公…

python调用GPT API

每次让gpt给我生成一个调用api的程序时&#xff0c;他经常会调用以前的一些api的方法&#xff0c;导致我的程序运行错误&#xff0c;所以这期记录一下使用新的方法区调用api 参考网址 Migration Guide&#xff0c;这里简要地概括了一下新版本做了哪些更改 OpenAI Python API l…

WEB 3D技术 three.js 设置图像随窗口大小变化而变化

本文 我们来讲讲我们图层适应窗口变化的效果 可能这样说有点笼统 那么 自适应应该大家更熟悉 就是 当我们窗口发生变化说 做一些界面调整比例 例如 我们这样一个i项目界面 我们打开 F12 明显有一部分被挡住了 那么 我们可以刷新 这样是正常了 但是 我们将F12关掉 给F12的…

Uniapp 开发 BLE

BLE 低功耗蓝牙&#xff08;Bluetooth Low Energy&#xff0c;或称Bluetooth LE、BLE&#xff0c;旧商标Bluetooth Smart&#xff09;&#xff0c;用于医疗保健、运动健身、安防、工业控制、家庭娱乐等领域。在如今的物联网时代下大放异彩&#xff0c;扮演者重要一环&#xff…

PIC单片机项目(8)——基于PIC16F877A的温度光照检测装置的protues仿真

1.功能设计 使用PIC16F877A单片机&#xff0c;进行温度检测、光照检测。温度使用的是DS18B20&#xff0c;光照检测直接利用的AD转换。 光照太暗就开灯&#xff0c;温度太高就开风扇。温度阈值和光照阈值都实时显示在LCD1602屏幕上面。 完成了protues仿真。文件里面包含代码和仿…

Liteos移植_STM32_HAL库

0 开发环境 STM32CubeMX(HAL库)keil 5正点原子探索者STM32F4ZET6LiteOS-develop分支 1 STM32CubeMX创建工程 如果有自己的工程&#xff0c;直接从LiteOS源码获取开始 关于STM32CubeMX的安装&#xff0c;看我另一篇博客STM32CubeMX安装 工程配置 创建新工程 选择芯片【STM32F…

第一次记录QPSK,BSPK,MPSK,QAM—MATLAB实现

最近有偶然的机会学习了一次QPSK防止以后忘记又得找资料&#xff0c;这里就详细的记录一下 基于 QPSK 的通信系统如图 1 所示&#xff0c;QPSK 调制是目前最常用的一种卫星数字和数 字集群信号调制方式&#xff0c;它具有较高的频谱利用率、较强的抗干扰性、在电路上实现也较为…

第34节: Vue3 调用内联处理程序中的方法

在UniApp中使用Vue3框架时&#xff0c;你可以在模板中直接调用组件内联处理程序中的方法。以下是一个示例&#xff1a; <template> <view> <button click"handleClick">Click me</button> <p>{{ message }}</p> </view&…

对token信息解码,JWT原理,jsonwebtoken如何使用?相关的工具介绍。

某一个业务需求&#xff0c;需要拿到我的用户信息&#xff0c;后端不直接返回的情况下。我需要对token信息解码拿到该信息&#xff0c;对jsonwebtoken进行一下简单学习&#xff0c;以此记录。 jsonwebtoken&#xff1a; jsonwebtoken 是一个 Node.js 中用于创建和验证 JSON W…

蓝牙物联网智能家居安防检测系统解决方案

随着科学技术的发展&#xff0c;我们的生活方式正在进行着翻天覆地的变化。互联网技术的实现推动了物联网新模式的出现改变着我们生活&#xff0c;使我们的社会生产生活变得更加的便利与人性化。借此现如今我们的生活方式更是向智能家居方向所发展&#xff0c;这一课题正在被相…

电脑组件整理(持续更新...)

1、*芯片 CPU(承担着负责的运算)&#xff1b; 量大阵营&#xff1a; AMD &#xff5c; Intel i5 12400F 6核12线 7nm -- 1189元 r7 5700x 8核16线 7 nm -- 1500元&#xff1b; ARM采用的是RISC精简指令集计算、 主要应用于移动终端之中&#xff0c;类如手机&#xff0c…

XTU OJ 1292

题意 输入一个字符串&#xff0c;定义一个条件&#xff0c;长度是偶数的子串&#xff0c;并且这个子串的前半部分和后半部分完全相同&#xff0c;求满足条件的子串的最长长度&#xff0c;字符串的最长长度不会超过1000&#xff0c;保证全是小写英文字母 输入 2 abbab aaaabb…

了解树和学习二叉树

1.树 1.1 概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 注意&#xff1a;树形结构中…

Kafka核心参数(带完善)

客户端 api Kafka提供了以下两套客户端API HighLevel(重点)LowLevel HighLevel API封装了kafka的运行细节&#xff0c;使用起来比较简单&#xff0c;是企业开发过程中最常用的客户端API。 而LowLevel API则需要客户端自己管理Kafka的运行细节&#xff0c;Partition&#x…

Linux-Keepalived(VRRP协议)高可用集群搭建

Linux-Keepalived&#xff08;VRRP协议&#xff09;高可用集群搭建 一、VRRP简介1.1 什么是VRRP&#xff1f;1.2 keepalived是什么&#xff1f;1.3 keepalived工作原理 二、实操配置过程2.1 试验模型2.2. Keepalived监控和维护VRRP集群的步骤2.2.1 安装keepalived2.2.2 配置kee…