一,定义变量let

1、变量提升,var声明的变量会自动提升到最高级,在声明之前就能访问而且还不会报错,它的值是undefined。

  1. console.log(a); //undefined
  2. var a = 2;
  3.  
  4. // 1,let声明变量没有变量提升,提前访问会报错
  5. console.log(b);
  6. let b = 10;

2、let声明的变量是一个块级作用域,只在当前的作用域有效,外面的作用域访问不到。

  1. if( 1 ==1 ){
  2. let c = 10;
  3. }
  4. // console.log(c); //报错

3、let声明的变量不能重复声明

  1. let d = 2;
  2. let d = 9; //报错

4、let声明的变量不会污染全局变量。

  1. let RegEXP = 20;
  2. console.log(RegEXP);
  3. console.log(window.RegExp); //没有这个值

5,解决了for循环中变量提升的问题,var定义的变量会被外面作用域访问到

  1. //解决了for循环中var定义的变量,会变量提升变成全局变量,会被外面作用域访问。
  2. var arr = [];
  3. for(var i = 0; i< 10; i++){
  4. arr[i] = i;
  5. }
  6. console.log(i); //

二,const 声明一个常量

1、const 声明的常量,一旦被声明,值就无法修改

  1. const pi = 3.01415;
  2. //pi = 3; //报错
  3.  
  4. {
  5. const arr = [5,6,8,9,];
  6. arr.push(7);
  7. console.log(arr);  //(5) [5, 6, 8, 9, 7]
  8. arr = 10; //值不能改变,否则报错
  9. }

2、const声明的对象可以修改里面的属性,但是不能直接修改常量的值

  1. const person = {
  2. name:'小狗'
  3. }
  4. person.name = 'bobo';
  5. console.log(person.name);
  6.  
  7. // 下面这个直接改变常量的值会报错
  8. person = {
  9. age:20
  10. }

例如:应用场景,固定的地址就可以用常量

  1. const path = 'path';
  2. console.log(path);  //path

三,字符串的扩展

判断字符串”hello word”中是否存在”word”,用字符串中的方法只有indexOf:

  1. var str = 'hello word';
  2. var result = str.indexOf('word');
  3. console.log(result);  //

在ES6中又为我们提供了其它的方法:

includes():  返回布尔值,用于判断字符串是否包含某些字符

  1. var bool = str.includes('word');
  2. console.log(bool); //true

startsWith(str[,num]):  返回布尔值,用于判断字符串是否以某个字符开头

  1. var bool2 = str.startsWith('hello');
  2. console.log(bool2); //true

//给这个方法传入2个参数
var bool3 = str.startsWith('word',6);
console.log(bool3);  //true

endsWith(str[,num]):  返回布尔值,用于判断字符串是否以某些字符结尾

  1. var bool4 = str.endsWith('d');
  2. console.log(bool4);  //true
  3. //给这个方法传入两个参数
  4. var bool5 = str.endsWith('o',7);
  5. console.log(bool5);  //false

repeat(num):  传入数字,这个方法将字符串重复数字对应次数

  1. var str322= '我爱我家,\n';
  2. console.log(str322.repeat(3)); //3行 我爱我家,

四, 5.0模板语法 :`模板字符串`

  1. var obj33 = {
  2. name:'zhuzhu',
  3. age:18,
  4. sex:'男',
  5. hobby:'女',
  6. veight:120,
  7. height:180
  8. };
  9. // 字符串拼接方法
  10. var str4 = '大家好,我叫:'+obj33.name+',今年'+obj33.age+',性别'+obj33.sex+',爱好'+obj33.hobby+'。';
  11. console.log(str4); //大家好,我叫:zhuzhu,今年18,性别男,爱好女。
  12.  
  13. // 但是字符串的拼接太麻烦了,有没有简单的方法来解决这个问题呢,有的,模板字符串就可以了
  14. var temp111 = `大家好,我叫${obj33.name},今年${obj33.age},性别${obj33.sex},爱好${obj33.hobby}`;
  15. console.log(temp111); //大家好,我叫zhuzhu,今年18,性别男,爱好女
  16.  
  17. //1,可以是变量
  18. let name8 = "美女";
  19. let temp22 = `我叫${name8}`;
  20. console.log(temp22); //我叫美女
  21.  
  22. // 2,可以是方法
  23. function getName(){
  24. return "宝宝";
  25. }
  26. let temp3 = `我叫${getName()}`;
  27. console.log(temp3); //我叫宝宝
  28.  
  29. // 3,可以是表达式
  30. let aa = 1 ;
  31. let bb = 2;
  32. let temp4 = `a + b=${aa+bb}`;
  33. console.log(temp4); //a + b=3

五,6.0箭头函数:()=>{}

为了方便书写,es6规定了一种新的写法来简化匿名函数:去掉function改为=>,结构为()=>{}

  1. // 最原始函数
  2. var arr = [2,3,5,7];
  3. $(arr).each(function(index,item){
  4. console.log(item);
  5. });
  6. // 改造一:函数中的funtion关键字我们可以省略,参数 和 方法体之间用=>
  7. $(arr).each((index,item)=>{console.log(item);})
  8. var fn = function(a, b) {
  9. return a + b;
  10. }
  11. // es6 箭头函数写法,当函数直接被return时,可以省略函数体的括号{}
  12. const fn = (a, b) => { a + b }; // {}可以省略
总结:
参数特点:
1)参数只有一个,可以去掉()
2)参数多个,不能去掉
3)参数没有,不能去掉
方法体特点:
1)方法体只有一句,可以省略{}
2)方法体只有一句,如果有return,也可以省略return
3)如果有多句代码,不能省略return
箭头函数没有固定的写法,它是根据当前方法的参数和方法的返回值来的。

注意:

         箭头函数可以替换函数表达式,但是不能替换函数声明;
         箭头函数本身没有this,箭头函数内部的this是定义时所在的对象;
         箭头函数不可以使用arguments对象,该对象在函数体内不存在;
         箭头函数不能作为构造函数,因为没有 prototype 和constructor属性 
  1. // 箭头函数不能作为构造函数:因为没有 prototype 和constructor属性
  2. let foot = function (name, age){
  3. this.name = name;
  4. this.age = age;
  5. }
  6.  
  7. let foot2 = (name, age)=>{
  8. this.name = name;
  9. this.age = age;
  10. }
  11.  
  12. let obj = new foot('abd', '19');
  13. let obj2 = new foot2('abd', '19'); //报错,foot2 is not a constructor

六,解构赋值:对象/数组赋值

  1. 对象赋值:对象根据属性名一一对应,无序对应
  2. 首先有这么一个对象const props = {
  3. className: 'tiger-button',
  4. loading: false,
  5. clicked: true,
  6. disabled: 'disabled'
  7. }
  8. // es5
  9. var loading = props.loading;
  10. var clicked = props.clicked;
  11. // es6
  12. const { loading, clicked } = props;
  13. 数组赋值:数组以序列号一一对应,有序对应;允许指定默认值;内部使用严格相等运算符(===)
  14. // es6
  15. const arr = [1, 2, 3];
  16. const [a, b, c] = arr;
  17.  
  18. // es5
  19. var arr = [1, 2, 3];
  20. var a = arr[0];
  21. var b = arr[1];
  22. var c = arr[2];

七,for...of循环遍历

ES6 借鉴 Java、C# 语言,引入了for...of循环,作为遍历所有数据结构的统一的方法。

for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。

  1. for(let codePointAt of 'hicai'){
  2. console.log(codePointAt);
  3. } // h i c a i
  4. 遍历对象用for...in
  5.  
  6. const arr = ['red', 'green', 'blue'];
  7. for (let i of arr){
  8. console.log(i); //打印出数组所有值
  9. }

八,展开运算符:(提高代码效率)

  1. ES6中用...来表示展开运算符,可以将数组方法或者对象方法进行展开;
  2. 数组:
  3. const arr1 = [1, 2, 3];
  4. const arr2 = [...arr1, 10, 20, 30];
  5. // 这样,arr2 就变成了[1, 2, 3, 10, 20, 30];
  6. 对象:
  7. const obj1 = {a:1,b:2,c:3}
  8. const obj2 = {
  9. ...obj1, d: 4, e: 5, f: 6
  10. }
  11. // 结果类似于 const obj2 = Object.assign({}, obj1, {d: 4})

九,class(类)

  1. js中,每个对象都有原型对象,所有js对象都从原型上继承方法和属性;
  2. ES5中,属性放在构造函数constructor里,方法放在原型prototype上;
  3. ES6中引入类class来代替构造函数constructor;还提供了extends划分super关键字;

十,promise对象:解决异步编程

  1.     特点:a)对象的状态不受外界影响,promise对象代表一个异步操作,有三种状态:pending(进行中)、resolve(成功)、rejected(失败)
  2. 一旦状态改变,就不会改变
  3. 基本用法:
  4. Promise构造函数的两个参数是resolvereject
  5. Promise实例生成后,可以用then方法分别制定resolverejected状态的回调函数;
  6. Promisethen方法是定义在原型对象Promise.prototype上的,then方法返回的是一个新的Promise实例,不是原来那个Promise实例,因此可以用链式写法;
  7. 方法1Promise.all()方法用于将多个promise实例包装成一个新的promise实例;
  8. 方法2Promise.race()方法只要有一个peomise执行完毕就执行

十一,模块化

  1. export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口
  2.  
  3. import用于在一个模块中加载另一个含有export接口的模块。

十二,Set和Map数据结构:

  1. Set
  2. aSet实例成员值唯一存储key值,map实例存储键值对(key-value
  3. bSet实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。
  4. 操作方法:
  5. addvalue):添加某个值,返回Set结构本身
  6. deletevalue):删除某个值,返回布尔值
  7. hasvalue):返回布尔值,表示该值是否为Set的成员
  8. clear():清除所有成员,没有返回值
  9. 遍历方法:
  10. keys():返回键名
  11. values():返回键值
  12. entries():返回键值对
  13. forEach():使用回调遍历每个成员
  14.  Map
  15. aMap的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键;
  16. bMap实例的属性和操作方法:
  17. size属性:返回Map结构的成员总数;
  18. set(key, value):设置键名key对应的键值为value,然后返回整个Map结构,若key已有值,则更新键值,否则生成该键。
  19. get(key):读取key对应的键值
  20. has(key):返回布尔值,表示某个键是否存在当前map对象中。
  21. delete(key):删除某个键,返回true,删除失败返回false
  22. clear():其清除所有成员,没有返回值
  23. cmap的遍历方法:
  24. keys():返回键名
  25. values:返回键值
  26. entries:返回所有成员
  27. forEach():遍历map的所有成员,map的遍历顺序就是插入顺序

十三,generator拦截器

参考:https://www.cnblogs.com/suihang/p/9961791.html

https://www.cnblogs.com/jolene/p/6067290.html

https://www.cnblogs.com/rocky-fang/p/5755755.html

https://blog.csdn.net/weixin_42412046/article/details/81459294

ES6的语法的更多相关文章

  1. ES6常用语法

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  2. ECMAScript简介以及es6新增语法

    ECMAScript简介 ECMAScript与JavaScript的关系 ECMAScript是JavaScript语言的国际化标准,JavaScript是ECMAScript的实现.(前者是后者的 ...

  3. ES6新语法

    ES6新语法概览 简介 ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015:该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委 ...

  4. ES6新语法的介绍

    对于ES6新语法,阮一峰有一篇文章介绍的挺详细 http://es6.ruanyifeng.com/#docs/destructuring

  5. ES6最新语法

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  6. ES6新语法之let关键字;有别于传统关键字var的使用

    ES6新语法于2015年发布:而我这个前端小白在17年才接触到.惭愧惭愧!!不过到目前为止,似乎只有FireFox和Chrome对ES6的支持相对良好.不过既然人家ES6已经出来了,还是要跟上技术的潮 ...

  7. 让 Node.js 支持 ES6 的语法

    为了让 Node.js 支持 ES6 的语法, 需要使用 Babel. 安装 es-checker 在使用 Babel 之前 , 我们先检测一下当前 node 对 es6 的支持情况. 在命令行下执行 ...

  8. Vue(1)- es6的语法、vue的基本语法、vue应用示例,vue基础语法

    一.es6的语法 1.let与var的区别 ES6 新增了let命令,用来声明变量.它的用法类似于var(ES5),但是所声明的变量,只在let命令所在的代码块内有效.如下代码: { let a = ...

  9. JavaScript ES6部分语法

    ES6是JavaScript语言的新版本,它也可以叫做ES2015,之前学习的JavaScript属于ES5,ES6在它的基础上增加了一些语法,ES6是未来JavaScript的趋势,而且vue组件开 ...

  10. ES6常用语法简介import export

    ES6常用语法简介import export let与var用法区别 //var var a = []; for (var i = 0; i < 10; i++) { a[i] = functi ...

随机推荐

  1. 【整理】01. Fiddler 杂记

    抓手机包步骤: Tools -- Fiddler Options -- Connections (默认)Fiddler listens on port:8888 (勾选)Allow remote co ...

  2. HttpURLConnection getInputStream异常的解决

    http://blog.csdn.net/q2232/article/details/48136973 但是当getResponseCode为自定义值,比如422时,httpURLConnection ...

  3. [补档][COGS 2434]暗之链锁

    [COGS 2434]暗之链锁 题目 传说中的暗之连锁被人们称为Dark.<!--more-->Dark是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现Dark呈现无 ...

  4. linux忘记密码/修改密码

    方法一:用set password命令 首先,登陆mysql ? 1 mysql -u root -p 然后执行set password命令 ? 1 set password for root@loc ...

  5. 媒体查询Media Queries详解

    @media 标签可以说是响应式网页的开发基础.其主要由媒体类型(Media Type)和 媒体特性(Media Query)两部分组成. Media Type 设定后面规则生效的展示类型,包括all ...

  6. mycat学习心得

    最近老大要求我们学习mycat,并运用到实际项目中.现在简单分享下自己的学习心得,也算是只是积累吧. 什么是mycat? 用我的话理解就是:mycat是一种技术,采用mycat后可以提高程序的速度,也 ...

  7. SpringMVC详解(一)------入门实例

    本系列教程我们将详细的对SpringMVC进行介绍,相信你在学完本系列教程后,一定能在实际开发中运用自如. 1.什么是 SpringMVC ? 在介绍什么是 SpringMVC 之前,我们先看看 Sp ...

  8. Android App 压力测试 monkeyrunner

    Android App 压力测试 第一部分 背景 1. 为什么要开展压力测试? 2. 什么时候开展压力测试?第二部分 理论 1. 手工测试场景 2. 自动测试创建 3. Monkey工具 4. ADB ...

  9. windows和linux下关闭Tomcat进程

    windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...

  10. 从 HTTP 到 HTTPS 再到 HSTS

    近些年,随着域名劫持.信息泄漏等网络安全事件的频繁发生,网站安全也变得越来越重要,也促成了网络传输协议从 HTTP 到 HTTPS 再到 HSTS 的转变. HTTP HTTP(超文本传输协议) 是一 ...