ES6必须知道的六大新特性

article/2025/11/10 18:06:50

ES6

ES6新特性-let&const

  • 使用const表示常量(声明之后不允许改变,一旦声明必须初始化,否则会报错)

//ES6 常量 不能修改const b=2;b=3;//Uncaught TypeError: Assignment to constant variable.console.log(b);
  • 使用var声明的变量往往会越域,而let声明的变量有严格的局部作用域

// ES6// var声明的变量往往会越域// let声明的变量有严格的局部作用域{var a=1;let c=3;}console.log(a);console.log(c);//Uncaught ReferenceError: c is not defined
  • let只可以声明一次,var可以声明多次

//var可以声明多次,let只可以声明一次var a=1var a=3let b=2let b=4console.log(a)console.log(b)//Uncaught SyntaxError: Identifier 'b' has already been declared
  • let不会变量提升,变量提升的意思是可以先使用变量,再声明

// var会变量提升
// let不会变量提升console.log(a)var a =1console.log(b)let b =2

image-20210930190340438

ES6新特性-解构&字符串

  • 数组的解构:

//数据的解构let arr=[1,2,3];let a=arr[0];let b=arr[1];let c=arr[2];console.info(a,b,c);//ES6:数组的解构表达式let[aa,bb,cc]=arr;console.info(aa,bb,cc);
  • 对象的解构:

let person={name:'徐庶',age:11,hobbies:['唱歌','跳舞']}let name=person.name;console.info(name)//ES6:对象的解构表达式let{name,age,hobbies}=person;console.info(name,age,hobbies);

image-20210930193138819

  • 字符串模板:直接将html放在``中

let html="<div>"+"<a>你好</a>"+"</div>";//ES6:字符串模板
let esHtml=`<div><a>你好</a></div>`;
console.info(esHtml);
  • 字符串扩展:

//字符串扩展
let str="hello.vue";
console.log(str.startsWith("hello"))//true
console.log(str.endsWith(".vue"))//true
console.log(str.includes("e"))//true
console.log(str.includes("hello"))//true
  • 字符串插入变量和表达式,变量名可以写在 , {}, ,{}中可以放入js表达式

 let person={name:'徐庶',age:11,hobbies:['唱歌','跳舞']}let{name,age,hobbies}=person;function fun(){return "这是一个函数"}//ES6:字符串插入变量和表达式,变量名写在${},${}中可以放入js表达式console.info(`名字是${name},年龄是${age},爱好是${hobbies},这个函数的返回值是${fun()}`);

ES6新特性-函数优化

  • 函数参数默认值:直接括号内设置默认值

//1.函数的参数默认值 ES之前function add(a){if(!a){a=1;}console.log(a);}add();//ES6:函数的参数默认值function add(a=1){console.info(a);}add();
  • 可变长度参数:在括号内的参数前添加…

//2.可变长度参数 ES之前function add(a){console.info(a);}add([1,2]);//ES6:可变长度参数function add(...a){console.log(a);}add(1,2,3);
  • 参数解构

//ES6:参数解构
let nums={a:1,b:2}function add({a,b}){console.log(a+b);}add(nums);
  • 箭头函数:单行的时候更简洁,不需要return,多行的时候需要。

//箭头函数 lambda =>   ES6之前function add(a,b){return a+b;}console.info(add(1,2));//ES6:箭头函数let add=(a,b)=>{let c=a+bconsole.log(c);}add(2,2);

ES6新特征-对象优化

  • 对象的内置函数

    • keys()显示对象的属性
    • values()显示属性的值
    • entries()显示对象的属性和值
    • 对象合并函数assign()
      • 说明:第一个参数是需要合并的对象 其他参数会合并到第一个参数上面(如果有相同的后来者居上)
// 1.对象的内置函数let person = {name: "jack",age: 21,language: ['java', 'js', 'css']}console.log(Object.keys(person));//["name", "age", "language"]console.log(Object.values(person));//["jack", 21, Array(3)]console.log(Object.entries(person));//[Array(2), Array(2), Array(2)]// 对象合并const target = { a: 1 };const source1 = { b: 2 };const source2 = { a:4,c: 3 };// 参数说明 第一个参数是需要合并的对象   其他参数会合并到第一个参数上面// 如果有重复的属性, 会以后面的进行覆盖Object.assign(target, source1, source2);console.log(target);//{a:4,b:2,c:3}
  • 声明对象简写

    • 对象属性的简写:属性名和引用的变量名是相同的就可以省略赋值

      let name="徐庶";
      let age=11;// ES6之前
      let person={name:name,age:age
      }// ES6: 对象声明属性的简写 :  如果属性名和引用的变量名是相同的就可以省略赋值,它会自动调用相同名字的变量
      let person={name,age
      } 
      console.info(person)
      
    • 对象中函数的简写:使用箭头函数声明,如果要调用本对象的属性this会失效,需要使用对象.属性的方式

      // ES: 对象中函数的简写方式
      let person={name:"徐庶",
      // ES6之前eat: function(food){console.info(this.name+"吃了:"+food)},
      // ES6:通过箭头函数声明,   如果要调用本对象的属性this指向window, 需要使用对象.属性eat2: (food) => console.info(person.name+"吃了:"+food),
      //第三种方式,不写冒号eat3(food){console.info(this.name+"吃了:"+food)}
      }
      person.eat("米饭");
      person.eat2("海鲜");
      person.eat3("水果");
      
    • 对象扩展运算符:拷贝与合并(…)

      //对象的扩展运算符//1.拷贝对象(深拷贝)let person={name:"xushu",age:18,wife:{name:"杨迪"}};let person2={...person};console.info(person2);//2.合并对象const target = { a: 1 };const source1 = { b: 2 };const source2 = { c: 3 };let newObject={...target,... source1,...source2};console.info(newObject);
      

ES6新特性-promise异步编排

  • 使用ES之前的ajax请求方式:

    //使用函数简化,但是还是嵌套的方式
    function myAjax(url, callback){$.ajax({url: url, success: function (result) {callback(result);}});}
    myAjax("http://localhost:8811/user/existUsername",function(result){if(result.data){myAjax("http://localhost:8811/user/existPhone",function(result){})}})//传统的ajax请求方式用户名是否存在   $.ajax({url: "http://localhost:8811/user/existUsername",success: function (result) {if (result.data) {alert('用户名不存在!')// 手机是否存在$.ajax({url: "http://localhost:8811/user/existPhone",success: function (result) {if (result.data) {alert('手机不存在!')// 注册用户$.ajax({url:"http://localhost:8811/user/registryUser",success: function (result) {if (result.data) {alert(result.message)}},error: function (err) {alert("异常" + err)}})} else {// 手机号已存在alert(result.message)}},error: function (err) {alert("异常" + err)}})} else {// 用户名已存在alert(result.message)}},error: function (err) {alert("异常" + err)}})
  • promise异步编排:

    • 当执行到resolve函数时,会调用.then()判断result
    • 当执行到reject函数时,会调用.catch()判断err
    new Promise((resolve, reject) => {// 1. 请求用户名是否存在$.ajax({url: "http://localhost:8811/user/existUsername",success: function (result) {resolve(result);},error: function (err) {reject(err);}})})// 2.手机是否存在.then(result => {return new Promise((resolve, reject) => {if (result.data) {alert('用户名不存在!')$.ajax({url: "http://localhost:8811/user/existPhone",success: function (result) {resolve(result);},error: function (err) {reject(err);}})} else {alert(result.message)}})}).then(result => {return new Promise((resolve, reject) => {if (result.data) {alert('手机不存在!')// 注册用户$.ajax({url: "http://localhost:8811/user/registryUser",success: function (result) {resolve(result);},error: function (err) {alert("异常" + err)}})} else {// 手机号已存在alert(result.message)}});}).then(result => {if (result.data) {alert(result.message)}}).catch(err => {alert('服务器异常')});//设置函数,简化请求function myAjax(url) {return new Promise((resolve, reject) => {// 1. 请求用户名是否存在$.ajax({url,success(result) {resolve(result);},error(err) {reject(err);}})})}// 验证用户名不存在myAjax("http://localhost:8811/user/existUsername").then(result => {if (result.data) {alert('用户名不存在!');return myAjax("http://localhost:8811/user/existPhone")} else {alert(result.message)}})// 验证手机号是否存在.then(result => {if (result.data) {alert('手机号不存在!');return myAjax("http://localhost:8811/user/registryUser")} else {alert(result.message)}})// 注册成功.then(result => {if (result.data) {alert(result.message)}}).catch(err => {alert('服务器异常')});
    

ES6新特性-模块化

  • 什么是模块化

    • 模块化就是把代码进行拆分,方便重复利用。类似于java中的导包:要使用一个包,必须先导包。然而JS中并没有包的概念,取而代之的是模块。
    • 在ES6中每一个模块既是一个文件,在文件中定义的变量,函数,对象在外部是无法获取的
    • 模块功能
      1. export命令用于规定模块的对外接口,如果你希望外部可以读取模块当中的内容,就必须使用export来对其进行暴露(输出)。其中export不仅仅只能导出对象,一切JS变量都可以导出
      2. import命令永固导入模块
  • import语法:

    1. import 组件名 from ‘js文件路径’
    2. 组件名={需要导入的组件}需要多个时,用逗号隔开。当需要用的组件很多时,可直接写成*,就不要{},但是还需要使用as取别名
    3. 非默认组件一定要用大括号,默认组件不能写在大括号里面
    <script type="module">
    // import 语法
    // import 组件名 from js文件路径
    // 组件名 : {需要导入的组件}  多个用逗号分隔,  用过组件有很多可以写成* ,就不需要{} ,但是还需要使用as取别名
    // 非默认组件一定要用大括号    ,默认组件不能写在大括号里面
    import * as person form './js/user.js'
    import xxx,{girl} from './js/user.js'console.info("---"+Object.keys(xxx));
    console.info("----"+girl);</script>
    
  • 导出语法:

    • 对应三种import语法
      1. 直接写在组件上面(变量、对象、函数…)(export let User
      2. 写在底部(批量导出)(export {User,girl}
      3. 导出默认组件(export default)
export default {username:'徐庶',age:'18',print() {console.info(`姓名${this.username},年龄:${this.age}`)}
}let girl ={realName:'迪丽热巴', cup:'E'
}export {girl}
// 需要导入 要先 导出 
// 导出 3:
//  1. 直接写在组件上面(变量、对象、函数....)
//export let User//  2. 写在底部(批量导出)
// export {User,girl}// 3. 导出默认组件

http://chatgpt.dhexx.cn/article/EOMp91av.shtml

相关文章

ES6中有哪些新特性?

ES6中的新特性(一) ECMAScript6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在 2015 年 6 月正式发布了。它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语言。 我们来看看…

面试题!es6新特性

es6新特性 ECMAScript 6(ES6) 目前基本成为业界标准&#xff0c;它的普及速度比 ES5 要快很多&#xff0c;主要原因是现代浏览器对 ES6的支持相当迅速&#xff0c;尤其是 Chrome 和 Firefox 浏览器&#xff0c;已经支持 ES6 中绝大多数的特性。 以下是一些常用到的es6新特性&…

es6的8条新特性总结

es6的8条新特性总结 认识es61.块级作用域变量&#xff08;let和const&#xff09;2.箭头函数3.模板字符串4.解构赋值5.默认参数6. 扩展运算符7. 类和继承8.Promise 认识es6 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript的新版本&#xff0c;引入了许多新特性和语法…

最全的—— ES6有哪些新特性?

目录 ES6新特性1、let和const2、symbol3、模板字符串3.1 字符串新方法&#xff08;补充&#xff09; 4、解构表达式4.1 数组解构4.2 对象解构 5、对象方面5.1 Map和Set5.1.1 Map5.1.2 Set 5.3 数组的新方法5.3.1 Array.from()方法5.3.2 includes()方法5.3.3 map()、filter() 方…

GWAS分析中协变量的区分(性别?PCA?初生重?)

1. 电子书领取 前几天发了一篇GWAS电子书分享&#xff0c;异常火爆&#xff0c;阅读量8000&#xff0c;很多人评价比较基础。这本电子书主要特点是比较基础&#xff0c;GLM模型用软件和R语言进行比较&#xff0c;如何添加数字协变量、因子协变量、PCA等内容&#xff0c;可以说…

时间序列 工具库学习(5) Darts模块-多个时间序列、预训练模型和协变量的概念和使用

1.实验目的 此笔记本用作以下目的&#xff1a; 在多个时间序列上训练单个模型使用预训练模型获取训练期间未见的任何时间序列的预测使用协变量训练和使用模型 2.导库 # fix python path if working locally from utils import fix_pythonpath_if_working_locallyfix_python…

Mplus数据分析:随机截距交叉之后的做法和如何加协变量,写给粉丝

记得之前有写过如何用R做随机截距交叉滞后&#xff0c;有些粉丝完全是R小白&#xff0c;还是希望我用mplus做&#xff0c;今天就给大家写写如何用mplus做随机截距交叉滞后。 做之前我们需要知道一些Mplus的默认的设定&#xff1a; observed and latent exogenous variables a…

中介变量、调节变量与协变量

在平时看论文过程中偶会接触到这几个概念&#xff0c;然而都没想过弄明白&#xff0c;每次总觉得只要看明白个大概反正自己又不用这种方法…作为科研人&#xff0c;还是应该保持谦逊&#xff0c;保持学习 一、中介变量 1.概念 中介变量&#xff08;mediator&#xff09;是自…

协变量偏移/标签偏移/概念偏移

协变量偏移 这里我们假设&#xff0c;虽然输入的分布可能随时间而改变&#xff0c;但是标记函数&#xff0c;即条件分布P&#xff08;y∣x&#xff09;不会改变。虽然这个问题容易理解&#xff0c;但在实践中也容易忽视。 想想区分猫和狗的一个例子。我们的训练数据使用的是猫…

R语言绘制校正协变量后的ROC曲线

ROC曲线也叫受试者工作曲线&#xff0c;原来用在军事雷达中&#xff0c;后面广泛应用于医学统计中。ROC曲线是根据一系列不同的二分类方式(分界值或决定阈)&#xff0c;以真阳性率(灵敏度)为纵坐标&#xff0c;假阳性率(1-特异度)为横坐标绘制的曲线。 ROC曲线主要应用于二分类…

倾向值分析(协变量选择)

Hirano 和 Imbens 基于预设的临界t值来设定预测变量的方法 逻辑回归&#xff1a;逻辑回归虽然带有回归字样&#xff0c;但是逻辑回归属于分类算法。逻辑回归可以进行多分类操作&#xff0c;但由逻辑回归算法本身性质决定其更常用于二分类。 a.逻辑回归公式如下&#xff1a; 其…

使用aPCoA包实现校正协变量的主坐标分析(aPCoA)以排除混杂协变量的影响

使用aPCoA包实现校正协变量的主坐标分析&#xff08;aPCoA&#xff09;以排除混杂协变量的影响 主坐标分析&#xff08;PCoA&#xff09;广泛用于生态学和微生物学等领域&#xff0c;以描述样本之间的差异&#xff0c;例如群落的beta多样性等。然而混杂的协变量可能会使与感兴趣…

多变量时间序列、预训练模型和协变量

darts官方地址 GitHub&#xff1a;https://github.com/unit8co/darts文档&#xff1a;https://unit8co.github.io/darts/index.html 本笔记可作为以下内容的教程&#xff1a; 在多个时间序列上训练单个模型使用预训练模型来获得训练期间看不到的任何时间序列的预测训练和使用…

协变量偏移_恶意软件分类的协变量偏移

协变量偏移 介绍 (Introduction) Covariate shift in the data-generating distribution lowers the usefulness of generalization error as a measure of model performance. By unpacking the definitions, the previous sentence translates to “high accuracy on the dis…

matlab 去除协变量,求助协变量调整

花了一个礼拜的时间重新学习了一下协方差&#xff0c;回归&#xff0c;感觉自己的理解很多都是不对的。 协方差分析是方差分析线性回归&#xff0c;但它要求很多&#xff0c;比如至少有两个分组(一个分组就是线性回归了)&#xff0c;协变量要是连续变量自变量和因变量要有线性关…

自变量/解释变量/因变量/响应变量/协变量等变量相关概念探析

概念探析 一般科学实验主要涉及以下三种变量&#xff1a; 自变量/独立变量&#xff08;independent variable&#xff09;&#xff1a;自变量是指在实验中由实验者操作的变量&#xff0c;它被认为不会受其他变量的影响&#xff08;即独立性&#xff09;。 因变量&#xff08…

爬虫-猫眼电影票房

背景 最近也不知道咋了&#xff0c;一直遇到 字体反爬手段&#xff0c;起点中文网&#xff0c;抖音等等吧&#xff0c;猫眼我一直想搞&#xff0c;只是没有精力了&#xff0c;前面搞了2个了&#xff0c;不差这一个。搞完这个&#xff0c;不在搞字体反爬了。 目标网站 猫眼票房…

python爬虫实例——中国电影票房

刚好最近在做一个关于中国电影市场的分析&#xff0c;所以这篇实例就诞生啦&#xff01;&#xff01;&#xff01; 一、观察网页 我所爬取的网站是&#xff1a;中国票房——年度票房。 网址甩出来&#xff1a;http://www.cbooo.cn/year?year2019 我们需要的数据是从2015年到…

python爬虫实战——猫眼电影案例

python爬虫实战——猫眼电影案例 背景 笔者上一篇文章《基于猫眼票房数据的可视化分析》中爬取了猫眼实时票房数据&#xff0c;用于展示近三年电影票房概况。由于数据中缺少导演/演员/编剧阵容等信息&#xff0c;所以爬取猫眼电影数据进行补充。关于爬虫的教学内容&#xff0c…

猫眼app产品分析和原型绘制

本项目为学习产品知识和技能过程中的一个小结&#xff0c;针对猫眼电影app的简单产品分析&#xff0c;顺便巩固xmind和axure技能。 项目名称 &#xff1a;猫眼电影app 产品背景&#xff1a;中国电影市场近10年&#xff08;2009年-2019年&#xff09;由高速增长阶段过渡到低速增…