JavaScript6
一、概念
ES6是JavaScript语言的标准。
新特性:let和const命令、变量的解构赋值、字符串函数对象数组等扩展。
环境准备:需要安装NodeJs。
二、新特性
1、let
let命令用来声明变量。他的用法类似var,但所声明的变量,只在let命令所在的代码块内有效
var特性:作用域是函数级的、存在变量提升。
let特性:作用域是块级的(花括号级)、不存在变量提升。
例子:
<script>/************************作用域**************************/ {var i=1;let j=2;}//打印:1console.log(i);//打印:Uncaught ReferenceError: j is not definedconsole.log(j);/************************变量提升**************************/ //打印:undefinedconsole.log(a);//打印:Uncaught ReferenceError: b is not definedconsole.log(b);var a=1;let b=1;/************************特殊作用域**************************/var c=[];// for(var d=0;d<10;d++){for(let d=0;d<10;d++){c[d]= function(){console.log(d);}}//当d用var定义是打印:10;当d用let定义时打印:6;c[6]();
</script>
2、const
一旦声明,常量的值不可改变。
const一旦声明时就必须赋值。
const为块级作用域。
const声明的常量不能提升。
<script>/****************声明后值不可变*****************/const a=1;//1console.log(a);a=2;//报错console.log(a);/****************声明时就必须赋值*****************///报错// const b;// b=2;/****************块级作用域*****************/{const c=1}//报错console.log(c);/****************常量不能提升*****************///报错console.log(d);const d=1;</script>
3、对象解构赋值
解构赋值可以用于对象,对象的属性没有次序,变量名必须与属性同名。
对象的解构赋值,可以很方便的将现有对象的方法,赋值到,某个变量。
<script>/**************用于对象******************/var uer={name:"11",age:22}const {age,name}=uer;//22 "11"console.log(age,name);/**************现有对象的方法******************/let {log} =consolelet {max,min,random}=Math;//3log(max(1,2,3));
</script>
4、字符串扩展
ES6加强了对Unicode的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的Unicode码。
/**************unicode******************///aconsole.log("\u0061");
字符串遍历器接口
/**************遍历器接口******************/for(let a of "1bsefewf"){console.log(a);}
模板字符串
/**************模板字符串******************/var url="http://www.baidu.com";//以前var a1="<a href='"+url+"'>111</a>";log(a1)//现在var a2=`<a href='${url}'>111</a>`;log(a2)
新增方法:includes()、startsWith()、endsWith()。
var c="asdefdwe";//truelog(c.includes("a"));log(c.startsWith("a"));log(c.endsWith("e"));//带参数 truelog(c.includes("f",2));log(c.startsWith("d",2));//第二个参数代表第几个结束log(c.endsWith("s",2));
repeat():返回一个新字符串,重复字符串N次
//asdefdweasdefdwelog(c.repeat(2));//""log(c.repeat(0));
padStart()、padEnd():自动补全,参数一:字符补全后所处位置,参数二:补全用的字符串
//ababaxlog("x".padStart(6,"ab"));//axlog("x".padStart(2,"ab"));//xababalog("x".padEnd(6,"ab"));//xalog("x".padEnd(2,"ab"));
trimStart()、trimEnd():分别去掉前后空格。都会返回新的字符串。
//aalog(" aa ".trim())//aa空格log(" aa ".trimStart())//空格aalog(" aa ".trimEnd())
at():接受一个整数作为参数,返回参数指定位置的字符。正数:从下标0开始。负数:倒叙从下标-1开始。
//blog("abc".at(1));//blog("abc".at(-2));
5、数组扩展
扩展运算符是三个点组成(...)。将一个数组转为用逗号分隔的参数序列。
let {log}=console;//1 1 2 3 log(1,...[1,2,3]);
替代函数的appply方法。
let {log}=console;var a=[1,2,43,66];//66log(Math.max.apply(null,a));//66log(Math.max(...a));
合并数组
let {log}=console;var a=[1,2,43,66];var b=[11,22,432,665];var c=a.concat(b);var d=[...a,...b];//1, 2, 43, 66, 11, 22, 432, 665log(c);//1, 2, 43, 66, 11, 22, 432, 665log(d);
Array.from():用于将类数组转为真正的数组。
常见类数组:arguments、元素集合、类似数组的对象。
类数组只能使用数组的读取方式和length属性。
<body><p>1</p><p>2</p><p>3</p>
</body>
<script>let {log}=console//argumentfunction acc(){//2log(arguments[1]);//[1, 2, 3]log(Array.from(arguments))}acc(1,2,3)//元素数组let ps=document.getElementsByTagName("p");//HTMLCollection(3) [p, p, p]log(ps);//<p>1</p>log(ps[0])//[p, p, p]log(Array.from(ps));//对象var user={"10":1,"2":2,'name':"22"}//1log(user[10]);log(Array.from(user));
</script>
Array.of:用于将一组值转换为数组。
6、对象的扩展
ES6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。
方法也可简写。
函数返回值也可用。
let {log} = console;let name="hell"var user={name,age:22,//老的// getName: function(){// log(this.name);// }getName(){log(this.name);}}log(user.name);user.getName();/*************函数返回值**************/function meth(){let x=21;let y=22;return { x , y}}log(meth().x)
属性名表达式
ES6允许字面量定义对象时,用表达式作为对象的属性名,即把表达式放在方括号内。
let a="abc";var b={[a]:22,name:222}//{abc: 22, name: 222}log(b);
对象的扩展运算符
let d={a:1,b:2}let f={...d}// {a: 1, b: 2}log(f);
7、箭头函数
在ES6中允许“箭头”(=>)定义函数
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
let {log}=console//参数var a=x=>{log(x)};//1a(1);var b=()=>{log("111");}//111b();var c=(x,y)=>{log(x+y);}//3c(1,2);
如果箭头函数的代码部分多于一条语句,就要使用大括号将他们括起来,并且使用return语句返回。
var d=(x,y)=>{let aa=1;log(x+y+aa);}//4d(1,2);
由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。
var e=()=>({X:1,y:2})//{X: 1, y: 2}log(e());
箭头函数的一个用处就是简化回调函数。
var f=[1,2,3]//1 2 3f.map((element,index)=>{log(element);})
对于普通函数来说,内部的this指向函数运行时所在的对象,但是这一点对箭头函数不成立。它没有自己的this对象,内部的this就是定义时上层作用域总的this。
var name="222";var user={name:"111",getName(){// setTimeout(function(){// //222// log(this.name)// })//111setTimeout(()=>{log(this.name)})}}user.getName();
8、set数据结构
ES6提供了新的数据结构set。他类似数组,但是成员的值都是唯一的。没有重复的值。
set数组用法:数组去重、字符去重。
add("值"):添加值
delete("值"):删除值
has("值"):判断set里面是否有这个值
clear():清除所有成员
size:属性返回长度
<script>let {log}=consolevar setNUm=new Set();var num=[1,2,3,4,5,5,6]num.forEach(n=>{setNUm.add(n);})//去重:1,2,3,4,5,6log(setNUm)var setA=new Set([1,2,3,4,4,54,5])//使用扩展预算符展示,变为数组: 1,2,3,4,54,5log(...setA)//字符串去重var str=new Set('嘤嘤嘤呃呃呃')//转换成字符串:嘤呃log([...str].join(''))//返回长度:2log(str.size)</script>
9、Promise
promise是异步编程的一种解决方案。他是一个对象,从它可以获取异步操作的消息。promise提供统一的API,各种异步操作都可以用同样的方法进行处理
有了promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
用法:promise对象是一个构造函数,用来生成promise实例。promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。
const promise=new Promise((resolve,reject)=>{if("成功"){resolve(true)}else{reject(false)}})
10、Async
async可以将异步操作变为同步操作。
在函数前面添加Async,是异步的前面添加await
实际运用:在发请求时,需要另一个请求获取到数据后,在拿着这个数据去发送请求。
/*------------------------异步---------------------*/function print() {//定时器是异步的,setTimeout(() => {console.log("异步11")}, 10);//先执行console.log("异步222")}// 先:222,在:11print();/*------------------------同步---------------------*/async function setTimess() {//定时器是异步的,return new Promise((resolve,reject)=> {setTimeout(() => {console.log("11")//返回一定放着里面!!!!!!!!!!!!!!!resolve(true);}, 10);})}async function prints(){let res=await setTimess();console.log(res);}// 先:222,在:11prints();
11、class
ES6提供了接近传统语言的class概念,作为模板对象
constructor方法是类的默认方法,通过new命令生成对象实例,自动调用该方法。一个类必须有constructor方法,没有定义显式的,就会添加一个空的。
生成类的实例使用new 对象();
class User{constructor(name,age){this.name=name;this.age=age;}getName(){console.log(this.name);}getAge(){return this.age}}var user=new User("11",22);user.getName();
属性与方法:
1、实例方法;
class People{say(){console.log("say something")}}var people=new People();people.say();
2、实例属性
class People{constructor(name,age){this.name=name;this.age=age;}say(){console.log(this.name+"say something"+this.age)}}var people=new People("name",22);people.say();console.log(people.age+people.name)
3、静态方法
类相当于实力的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上关键字static,就表示该方法不会被实例继承。
如果静态方法包含this关键字,这this指的是类,而不是实例。
class Abc{static abc(){console.log("静态方法")}static getSay(){this.say();}static say(){console.log("static")}say(){console.log("not static")}}Abc.abc();//staticAbc.getSay();var a=new Abc();//not statica.say();//不能,报错a.abc();
12、Module
Js一直没有模块体系,无法将一个大型程序拆分成相互依赖的小文件。ES6模块是通过export命令显示指定输出的代码,在通过import命令输入。
//导出
export getName(){console.log("name");
}//引用。name.js是上方方法的文件
import {geName} from "./name.js"
相关文章:
JavaScript6
一、概念 ES6是JavaScript语言的标准。 新特性:let和const命令、变量的解构赋值、字符串函数对象数组等扩展。 环境准备:需要安装NodeJs。 二、新特性 1、let let命令用来声明变量。他的用法类似var,但所声明的变量,只在let命令…...
轻松安装Redis:不用担心配置问题
一、Centos安装Redis 1.安装 EPEL 源 Redis 不在 CentOS 官方仓库中,需要安装 EPEL 源才能访问到 Redis 软件包。运行以下命令安装 EPEL 源: sudo yum install epel-release 2.安装 Redis 使用以下命令安装 Redis: sudo yum install re…...

ChatGPT学习研究总结
目录 ChatGPT研究总结 一、程序接入用途不大 二、思考:如何构建一个类似ChatGPT的自定义模型 一些ChatGPT研究学习资料(来源网络) (1)一文读懂ChatGPT模型原理 (2)MATLAB科研图像处理——…...

SpringBoot枚举入参实战
文章目录 前言一、什么是枚举?二、枚举的优点三、枚举的缺点四、使用步骤1.代码实现1.1.枚举1.2.实体1.3.控制层 2.Postman测试2.1.Get请求2.1.1.枚举参数2.1.2.对象枚举属性参数 2.2.Post请求2.2.1.枚举参数2.2.2.对象枚举属性参数 2.3.Put请求2.3.1.枚举参数2.3.2…...

Ansible介绍
文章目录 Ansible介绍Ansible的架构为什么要有Ansible TowerAnsible Tower Ansible介绍 Ansible是一种自动化工具,可以用于自动化部署、配置和管理IT基础设施。它是一种基于Python的开源软件,提供了一个简单易用的语言和工具集,使得自动化管…...

GPT-4的免费使用方法分享
目录 方法1:使用Ora.sh的LLM应用 方法2:使用https://steamship.com 方法3:使用https://nat.dev 方法4:http://tdchat.vip 方法5:使用Poe网站或App 方法6:使用 Opencat App 方法7:使用https://Huggin…...
一个产品的诞生
一个产品的诞生 一个产品的诞生通常需要经历多个阶段,包括市场调研、产品设计、原型制作、测试和生产等。在市场调研阶段,公司会了解消费者的需求和市场趋势,以确定产品的定位和特点。在产品设计阶段,设计师会根据市场调研结果和…...

MQTT与传统的HTTP协议对比,优势在哪里呢?
HTTP是应用最为广泛和流行的协议。但是MQTT在过去的几年里迅速取得了进展。在讨论物联网开发的时候,开发者必须在这两者之间作出选择。 MQTT集中于数据,而HTTP集中于文档。HTTP是一个用于客户端-服务器计算的请求-响应协议,它并非总是为移动设…...

热榜!阿里出品2023版Java架构师面试指南,涵盖Java所有核心技能
最近很多粉丝朋友私信我说:熬过了去年的寒冬却没熬过现在的内卷;打开Boss直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉Java一个初中级岗位有上千人同时竞争࿰…...

【小程序】封装时间选择组件:用单元格van-cell和插槽slot,包括起始时间和终止时间
效果 可以选择起始时间和终止时间,并显示。 时间选择器放在van-cell的value插槽中。 用的库: https://vant-contrib.gitee.io/vant-weapp/#/home https://dayjs.fenxianglu.cn/category/ 用的组件:Cell单元格、DatetimePicker时间选择、Pop…...

华为OD机试真题B卷 Java 实现【猜密码】
一、题目描述 小杨申请了一个保密柜,但是他忘记了密码。只记得密码都是数字,而且所有数字都是不重复的。 请你根据他记住的数字范围和密码的最小数字数量,帮他算下有哪些可能的组合,规则如下: 输出的组合都是从可选的数字范围中选取的,且不能重复;输出的密码数字要按照…...
沉淀-MYSQL
MYSQL学习 数据库操作 创建数据库 create database db_name; 删除数据库 drop database db_name; 选择/使用数据库 use db_name; 使用mysqladmin在终端执行 创建数据库 mysqladmin -u root -p create db_name Enter password:*** 删除数据库 mysqladmin -u root -p drop db…...

OJ练习第116题——二进制矩阵中的最短路径(BFS)
二进制矩阵中的最短路径 力扣链接:1091. 二进制矩阵中的最短路径 题目描述 给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格&am…...

2023上半年软件设计师真题评析
2023年上半年软设是2018年改版后的一次考试,以下内容根据考完回忆结合网上暂时流传的真题(不保证完全正确)整理,主要侧重相关知识点罗列,少讲或不讲具体的答案,主要给自己的计算机基础查漏补缺,同时也希望对大家有帮助…...
(汇编) 基于VS的x86汇编基础指令
文章目录 环境汇编基础标志位常用指令 vs配置END 环境 visual studio 选择x86运行 示例代码 /** | 32位 | 16位 | 高8位 | 低8位 | | ---- | ---- | ----- | ----- | | EAX | AX | AH | AL |*/ #include <iostream>int main() {int32_t x 1;int32_t y 2;//…...
算法Day16 | 104.二叉树的最大深度,559.n叉树的最大深度, 111.二叉树的最小深度,222.完全二叉树的节点个数
Day16 104.二叉树的最大深度559.n叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数 104.二叉树的最大深度 题目链接: 104.二叉树的最大深度 深度和高度相反。 高度,自然是从下向上数:叶子节点是第一层,往上数&#x…...
java设计模式之责任链设计模式的前世今生
责任链设计模式是什么? 责任链设计模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合关系。在责任链模式中,每个处理对…...

是面试官放水,还是公司太缺人了?华为原来这么容易就进了...
华为是大企业,是不是很难进去啊?” “在华为做软件测试,能得到很好的发展吗? 一进去就有9.5K,其实也没有想的那么难” 直到现在,心情都还是无比激动! 本人211非科班,之前在字节和腾…...

PLC/DCS系统常见的干扰现象及判断方法
一般来说,常见的干扰现象有以下几种: 1.系统发指令时,电机无规则地转动; 2.信号等于零时,数字显示表数值乱跳; 3。传感器工作时,DCS/PLC 采集过来的信号与实际参数所对应的信号值不吻合,且误…...

c++ 11标准模板(STL) std::map(四)
定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...