什么是ECMAScript?

ECMAScript是浏览器脚本语言的规范,而我们熟知的js语言,如JavaScript则是规范的具体实现。es6就好比Java的jdk。

一、es6语法详解:let声明变量

1、var声明的变量往往会越域;let声明的变量有严格局部作用域

  1. {
  2. var a = 1;
  3. let b = 2;
  4. }
  5. console.log(a) // 1
  6. console.log(b) // Uncaught ReferenceError: b is not defined

2、var 可以声明多次;let只能声明一次

  1. var m = 1;
  2. var m = 2;
  3. let n = 1;
  4. let n = 2;
  5. console.log(m) //2
  6. console.log(n) //Uncaught SyntaxError: Identifier 'n' has already been declared

3、var会变量提升;let不存在变量提升

  1. console.log(x);
  2. var x = 10; // undefined
  3. console.log(y);
  4. let y = 12; // Uncaught ReferenceError: Cannot access 'y' before initialization

注意:以后要习惯使用let声明变量

二、es6语法详解:const声明变量 相当于声明了一个常量

1、声明之后不允许改变

  1. const a = 1;
  2. console.log(a) //1
  3. a = 2;
  4. console.log(a) // Uncaught TypeError: Assignment to constant variable.

2、一旦声明必须初始化,否则会报错

  1. const a;
  2. a = 1;
  3. console.log(a) //Uncaught SyntaxError: Missing initializer in const declaration

三、es6语法详解:解构表达式

1、数组解构

  1. let arr = [1, 2, 3];
  2. let [a, b, c] = arr;
  3. console.log(a, b, c) //1,2,3

2、对象解构

  1. const person = {
  2. name: "qiyue",
  3. age: 23,
  4. language: ['java', 'js', 'css']
  5. }
  6. const { name, age, language } = person
  7. console.log(name, age, language) //qiyue 23 (3) ["java", "js", "css"]
  1. const person = {
  2. name: "qiyue",
  3. age: 23,
  4. language: ['java', 'js', 'css']
  5. }
  6. //从person里解析出name的值在赋值给abc
  7. const { name:abc, age, language } = person
  8. console.log(abc, age, language) //qiyue 23 (3) ["java", "js", "css"]

四、es6语法详解: 字符串扩展

  1. let str = "hello.vue";
  2. console.log(str.startsWith("hello")) //true
  3. console.log(str.endsWith("vue")) //true
  4. console.log(str.includes("e")) //true
  5. console.log(str.includes("hello")) //true

五、es6语法详解: 字符串模板

  1. let str = `<span>hello world</span>`
  2. console.log(str) // <span>hello world</span>

六、es6语法详解: 字符串插入变量和表达式。变量写在${}中,${}中可以放入js表达式

  1. let info = `我是${abc},今年${age}`
  2. console.log(info) //我是qiyue,今年23
  1. let info = `我是${abc},今年${age}`
  2. console.log(info) //我是qiyue,今年23
  1. let info = `我是${abc},今年${age}`
  2. console.log(info) //我是qiyue,今年23
  1. function fun() {
  2. return "这是一个函数";
  3. }
  4. let info = `我是${abc},今年${age + 10},我想说:${fun()}`
  5. console.log(info) //我是qiyue,今年33,我想说:这是一个函数

七、es6语法详解: 函数优化

1、函数默认值:直接给参数写上默认值,没传就会自动使用默认值

  1. function add(a, b = 1) {
  2. return a + b;
  3. }
  4. console.log(add(10)) //11

2、不定参数:不定参数用了表示不确定的参数个数,形如...变量名,由...加上要给具名参数标识符组成。具名参数只能放在参数列表的最后,并且有且只有一个不定参数

  1. function fun(...params) {
  2. console.log(params.length)
  3. }
  4. fun(1, 2) // 2
  5. fun(1, 2, 3, 4) //4

3、箭头函数

  1. //以前
  2. var sum = function (a, b) {
  3. c = a + b
  4. return c
  5. }
  6. console.log(sum(2, 3)) // 5
  7. //箭头函数
  8. var sum2 = (a, b) => a + b;
  9. console.log(sum2(2, 4)) // 6

4、箭头函数结合解构表达式

  1. //以前
  2. function hello(person) {
  3. console.log("hello" + person.name)
  4. }
  5. hello(person); //helloqiyue
  6. //箭头函数
  7. let hello2 = params => console.log("hello" + person.name)
  8. hello2(person) //helloqiyue
  9. //箭头函数加解构表达式
  10. var hello3 = ({ name }) => console.log("hello" + name)
  11. hello3(person) //helloqiyue

八、es6语法详解: 对象优化

1、es6给Object扩展了许多新的方法,如

  • key(obj):获取对象的所有key形成的数组
  • value(obj):获取对象的所有value形成的数组
  • entries(obj):获取对象所有的key和value形成的二维数组
  1. const person = {
  2. name: "qiyue",
  3. age: 23,
  4. language: ["java", "js", "css"]
  5. }
  6. console.log(Object.keys(person)) //["name","age","language"]
  7. console.log(Object.values(person)) // ["qiyue",23,Array(3)]
  8. console.log(Object.entries(person)) //[Array(2),Array(2),Array(2)]

2、Object.assign方法的第一个参数是目标对象,后面的参数都是源对象;将源对象的属性赋值到目标对象中

  1. onst target = { a: 1 }
  2. const source1 = { b: 2 }
  3. const source2 = { c: 3 }
  4. Object.assign(target, source1, source2);
  5. console.log(target) //{a: 1, b: 2, c: 3}

3、 声明对象简写

  1. //以前
  2. const name = 'sanyue'
  3. const age = 21
  4. //将属性值name,age分别赋给person1对象的name,age,后面是属性值
  5. const person1 = { name: name, age: age }
  6. console.log(person1) //{name: "sanyue", age: 21}
  7. //es6:属性名和属性值变量名一样,可以省略
  8. const person2 = {name,age}
  9. console.log(person2) //{name: "sanyue", age: 21}

4、对象的函数属性简写

  1. let person3 = {
  2. name: "qiyue",
  3. //以前
  4. eat: function (food) {
  5. console.log(this.name + "在吃" + food);
  6. },
  7. //箭头函数中this不能使用,用对象.属性
  8. eat2: food => console.log(person3.name + "在吃" + food),
  9. eat3(food) {
  10. console.log(this.name + "在吃" + food)
  11. }
  12. }
  13. person3.eat("苹果") //qiyue在吃苹果
  14. person3.eat2("香蕉") // qiyue在吃香蕉
  15. person3.eat3("西瓜") //qiyue在吃西瓜

5、对象的扩展运算符

扩展运算符(...)用于取出参数对象所有可遍历属性然后拷贝到当前对象

  1. //拷贝对象(深拷贝)
  2. let p1 = { name: "qiyue", age: 23 }
  3. let obj = { ...p1 }
  4. console.log(obj)//{name: "qiyue", age: 23}
  5. //合并对象
  6. let age1 = { age: 24 }
  7. let name1 = { name: "qiyue" }
  8. let p2 = {}
  9. p2 = { ...age1, ...name1 }
  10. console.log(p2) //{age: 24, name: "qiyue"}
  11. //如果p2中原本有name,age属性会被覆盖

九、es6语法详解:map和reduce方法

1、map():接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回

  1. let arr = ["1", "3", "4", "23"]
  2. arr = arr.map(item => item * 2)
  3. console.log(arr) //[2, 6, 8, 46]

2、reduce():为数组中的每一个元素依次执行回调函数,不包括数组中被删除或未被赋值的元素

语法:arr.reduce(callbace,[initialValue])

callback(执行数组中每个值的函数,包含四个参数)

  • previousValue(上一次调用回调返回的值,或者是提供的初始值(initialValue))
  • currentValue(数组中当前被处理的元素)、
  • index(当前元素在数组中的索引)
  • array(调用reduce的数组)

initialValue(作为第一次调用callback的第一个参数)

  1. let arr1 = [2, 40, -10, 6]
  2. let result = arr1.reduce((a, b) => {
  3. return a + b
  4. }, 10)
  5. console.log(result)//48

十、es6语法详解:模块化

什么是模块化:模块化就是把代码进行拆分,方便重复利用。类似Java中的导包,要使用一个包,必须先导包。二Js中没有包的概念,换来的就是模块

模块的功能主要有两个命令构成:export和import

  • export命令用于规定模块的对外接口,export不仅可以导出对象,一切js变量都可以导出。比如:基本类型变量、函数、数组、对象
  • import命令用于导入其他模块提供的功能

es6语法详解的更多相关文章

  1. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  2. Hive笔记--sql语法详解及JavaAPI

    Hive SQL 语法详解:http://blog.csdn.net/hguisu/article/details/7256833Hive SQL 学习笔记(常用):http://blog.sina. ...

  3. Hadoop Hive sql语法详解

    Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...

  4. Thymeleaf3语法详解和实战

    Thymeleaf3语法详解 Thymeleaf是Spring boot推荐使用的模版引擎,除此之外常见的还有Freemarker和Jsp.Jsp应该是我们最早接触的模版引擎.而Freemarker工 ...

  5. Xpath语法详解

    1.简介 XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历 XPath的安装 Chrome插件XPath Helper 点Chrome浏览器 ...

  6. mysql用户授权、数据库权限管理、sql语法详解

    mysql用户授权.数据库权限管理.sql语法详解 —— NiceCui 某个数据库所有的权限 ALL 后面+ PRIVILEGES SQL 某个数据库 特定的权限SQL mysql 授权语法 SQL ...

  7. Java8的Stream语法详解(转载)

    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...

  8. [持续交付实践] pipeline使用:语法详解

    一.引言 jenkins pipeline语法的发展如此之快用日新月异来形容也不为过,而目前国内对jenkins pipeline关注的人还非常少,相关的文章更是稀少,唯一看到w3c有篇相关的估计是直 ...

  9. Java 8系列之Stream的基本语法详解

    本文转至:https://blog.csdn.net/io_field/article/details/54971761 Stream系列: Java 8系列之Stream的基本语法详解 Java 8 ...

随机推荐

  1. 记:create-react-app暴露配置报错

    上面主要是说 webpack 版本冲突 不是create-react-app本身的问题,需要手动解决. 解决办法: npm run eject // 显示所有的依赖项 如果运行出现类似这样的报错 Ar ...

  2. js上 五、运算符-1

    5.1.认识运算符 什么是运算符? 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算. 运算符的应用: 购物车:计算总价,数量: **Js ** 中有哪些运算符? 算术运算符.赋值运算符 ...

  3. Spark-6-如何缓解消除数据倾斜

    1 尽量避免数据源的数据倾斜 比如数据源是Kafka 以Spark Stream通过DirectStream方式读取Kafka数据为例.由于Kafka的每一个Partition对应Spark的一个Ta ...

  4. 常用的一句话反弹shell总结

    文章转载来源:https://blog.csdn.net/qq_38684504/article/details/90047213#1.%20bash%E7%9B%B4%E6%8E%A5%E5%8F% ...

  5. SpringBoot进阶教程(六十七)RateLimiter限流

    在上一篇文章nginx限流配置中,我们介绍了如何使用nginx限流,这篇文章介绍另外一种限流方式---RateLimiter. v限流背景 在早期的计算机领域,限流技术(time limiting)被 ...

  6. Django项目连接多个数据库配置

    1.设置数据库连接 pip install PyMySQL 2.在项目同名目录myproject/myproject下的__init__.py添加以下代码 import pymysql pymysql ...

  7. mysql 5.7 主从复制搭建及原理

    1. 主从复制搭建 1.1 环境准备 OS: Ubuntu 18.04 master: 192.168.0.3 slave: 192.168.0.6 1.2 安装依赖包 # Ubuntu apt-ge ...

  8. CSS系列 (04):盒模型详解

    盒模型 CSS盒模型分成W3C标准盒模型和IE模型 W3C标准盒模型(默认):box-sizing: content-box padding和border都会撑开盒子,改变盒子的宽度高度 总宽度:wi ...

  9. 认识 YUV

    什么是 YUV YUV是一种颜色编码格式,可以说YUV流媒体是原始流数据,大部分的视频领域都在使用.与RGB类似,但RGB更多的用于渲染时,而YUV则用在数据传输,因为它占用更少的频宽.当然,实时通讯 ...

  10. ubuntu系统64位dnw

    /* dnw2 linux main file. This depends on libusb. * * * * Author: Fox <hulifox008@163.com> * * ...