ES 6学习笔记:

声明变量:

let声明变量不可重复声明

var 可以重复声明变量

块级作用域: 全局,函数,eval

let 的作用域只是在代码块中。 if else while for

var 的作用域是全局作用域

不存在变量提升:

let[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkVTN2Ef-1672538086501)(C:\Users\12926\AppData\Roaming\Typora\typora-user-images\image-20221227103328781.png)]let 不允许在变量声明之前去使用变量 会报错,

var 在变量之前去使用变量,会出现undefined

不影响作用域链

Const 常量 及特点:

1,const 常量一定要赋初始值

2,一般常量使用大写

3,常量的值不能修改

4,块级作用域

5,对于数组和对象里的属性作修改,不算对常量的修改,不会报错

变量解构赋值:

解构赋值:es 6 允许按照一定的模式从数组和对象中提取值,对变量进行赋值

1,数组的解构

const  F4  = ['XIA','LI','JUN','张']
let [xiao,liu ,zhao,song ] = F4;
console.log(xiao);   //XIA
console.log(liu);    //LI
console.log(zhao);   //JUN
console.log(song);   //张

2,对象的解构

const  zhao = {name :'夏',age: '19',xiaopin : function(){conlog.log("xxxxxx")}
}let { name ,age ,xiaopin }  = zhao;
conlog.log(name)    // 夏
conlog.log(age)     // 19
conlog.log(xiaopin)  //上面那个方法

es6 模板字符串

ES6  引入新的声明字符串的方式  [ `` ]  , ''  ,  ""
1,声明  let str  = `我也是一个字符串`;
console.log(str,typeof str)   //我也是一个字符串  +  String2,特性
一: 内容中可以直接出现换行符
二: 变量拼接
let a = '夏';
let b = `${a} 是我心目中最帅的人`;
console.log(b)  //打印: 夏是我心目中最帅的人

es6 的对象简写写法

ES  6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法
//这样书写也更加的简洁let name  = '尚硅谷';
let change = function(){console.log('尚硅谷白嫖还不错!')
}
const  school = {name,change //定义一个方法,可以直接简写为improve(){console.log("我们是简写之后的方法!!!")}
}
console.log(school)  //打印结果为: '尚硅谷' ,  function()

es6 箭头函数

ES6  允许使用[ 箭头函数] (=>)定义函数
//声明一个函数
之前声明:
let  fn = function(){}
使用箭头函数
let fn = (形参1,形参2) => {//代码体return 形参1+形参2;
}
//调用箭头函数
let result = fn(形参1,形参2)
console.log(result);  //结果为  形参1+形参2//箭头函数的特性
1,this是静态的,this 始终指向函数声明时所在作用域下的this 的值
function getName(){console.log(this.name);
}
let getName2 = () => {console.log(this.name);
}  //设置window  对象的name  属性
window.name = '尚硅谷';
const school = {name: "ATGUIGU"
}
//直接调用俩个函数
getName();       //尚硅谷
getName2();      //尚硅谷getName.call(school);    //ATGUIGU
getName2.call(school);   //尚硅谷2,不能作为构造函数实例化对象
let person = (name,age) => {this,name = name;this,age = age;
}
let me = new Person('xia',30)
console.log(me)   //会报一个 语法错误,person is not  a  constructor3,不能使用 argument  变量let  fn = () =>{console.log(argument)  //会报argument  没有被定义}4 .箭头函数的简写1,省略小括号, 当形参有且只有一个的时候原:let add = (n) => {   ==>  return n + n;}
因为只有一个形参  可以简写为: let add = n =>{return n + n;}                                                   console.log(add(9));2,省略花括号 当代码体只有一条语句的时候 ,此时return 必须省略,而且语句的执行结果就是函数的返回值原:let pow = (n) => {return n*n;};
console.log(pow(9));简写为:
let pow = n => n*n;

箭头函数允许给参数赋值初始值

1.形参的一个初始值
function add(a,b,c=10){//形参初始值,具有默认值的参数,一般的位置要靠后  (潜规则)return a+b+c;
}
let result = add(1,2);
console.log(result);     //  通过给c=10;赋默认值,打印结果为132与解构赋值结合
function connect(options,username,password,port){console.log(username)
}
connect({host: 'localhost',username: 'root',password:'root',port:3306
})

es6 —rest 参数

//es6  引入rest 参数,用于获取函数的实参,用来代替arguments
//es5  获取实参的方式
function date(){console.log(arguments)
}
date('夏','茂');// es6获取实参的方式  --rest 方式function date(...args) {console.log(args)   //filter some every map}
date('夏','mao')   //rest 参数必须要放到参数的最后
function date(a,b,...args){console.log(a)console.log(b)console.log(args)}date(1,2,3,4,5,6)  打印1,2      3,4,5,6  数组

es6 扩展运算符

// [ ... ]  扩展运算符能将 数组转换为逗号分隔的 参数序列//声明一个数组  ...const tfboys = ['王实际','齐菁菁','高俊']//声明一个函数   -->将一个数组变成三个参数function chuanwan(){console.log(arguments);}chuanwan(...tfboys);//应用
//1.数组的合并const kuaizi = ['王太利','肖洋'];const fenghuang = ['凤凰传奇','玲花'];//es5  的合并方法console.log(kuaizi.concat(fenghuang));//es6  扩展运算符const hebin = [...kuaizi,...fenghuang];console.log(hebin);//2.数组的克隆const sanzhihua = ['E','G','M'];const sanzhicao = [...sanzhihua];console.log(sanzhicao);//3.将伪数组转换成真正的数组const divs = document.querySelectorAll('div');const arrdivs = [...divs];console.log(arrdivs);

es6 之Symbol 的介绍与创建

Symbol 的特点:
1,Symbol  的值是唯一的,用来解决命名冲突问题
2,Symbol  的值不能与其他数据进行运算
3,Symbol  定义的对象属性不能使用 for ... in  循环遍历,但是可以使用Reflect.ownKeys 来获取对象的所有键名;//1,创建symbollet s= Symbol();console.log(s,typeof s);//2,第二种创建symbol 的方法let s2 = Symbol('夏天');let s3 = Symbol('夏天');console.log(s2);console.log(s3);console.log(s2 === s3);//3,第三种创建的方法let s4 = Symbol.for('冬天');console.log(s4);
//USONB  u  underfineds  stringo  objectb  boolenSymbol  的使用:// Symbol 向对象中添加方法//  Symbol 表示独一无二 的值,往对象中添加方法和属性let game  = {}//声明一个对象let methods = {up: Symbol(),   //表明我当前的方法是独一无二的down: Symbol()};game[methods.up] =function(){console.log("我可以改变形状");}game[methods.down] = function(){console.log("我可以啊安全的下降");}console.log(game);
// 第二种添加方法let youxi ={name: "狼人杀",[Symbol('say')]:function(){console.log("我可以发芽吗?");}}console.log(youxi);

Symbol 内置值

1, Symbol.isConcatSpreadable
2, Symbol.unscopables
3, Symbol.match
4, Symbol.replace
5, Symbol.search
6, Symbol.spilt
7, Symbol.iterator
8, Symbol.toPrimitive
9, Symbol.toStringTag
10,Symbol.species

迭代器

//声明一个数组const xiyou = ['唐总','孙悟空','猪八戒','沙僧']console.log(xiyou);//使用for  of  遍历for(let v of xiyou){console.log(v); // 唐总,孙悟空,猪八戒,沙僧  键值}for(let v in xiyou){console.log(v);  //0,1,2,3   键名let iterator = xiyou[Symbol.iterator]();console.log(iterator);//调用对象的next  方法// console.log(iterator.next());// console.log(iterator.next());// console.log(iterator.next());// console.log(iterator.next());迭代器的应用://迭代器的应用  -->  自定义遍历数据的时候,需要用到迭代器const banji = {name: '终极一班',stus:['xiaoxia','xiaozhang','knight','zhangzhang'],[Symbol.iterator](){//索引变量let index = 0;let _this = this;return {next: function(){if (index < _this.stus.length) {const result = {value: _this.stus[index],done: false};index++;return result;}else{return {value: undefined,done:false}}}};}}

生成器函数 声明与调用

初体验:
//生成器其实就是一个特殊的函数// 异步编程   纯回调函数function * gen(){console.log("你好");//yield  函数代码的分隔符yield '小溪是我的朋友';console.log("小溪是我的朋友");yield '法外狂徒张三';console.log("法外狂徒张三");yield '就是牛,你怎么说?';console.log("就是牛");}let iterator = gen();console.log(iterator);console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());for (let v of gen() ) {console.log(v);}

生成器传参

//生成器函数参数function * gen(arg) {console.log(arg);let one = yield 111;console.log(one);let two = yield 222;console.log(two);let three = yield 333;console.log(three);}//获取迭代器对象let iterator =  gen('AAA');console.log(iterator.next());console.log(iterator.next('BBB'));console.log(iterator.next('CCC'));console.log(iterator.next());

Promise

promise  是es6 引入异步编程的新解决方案。语法上是promise是一个构造函数,用来封装异步操作并可以获取其成功或者失败的结果
1,Promise 构造函数: Promise(excutor) {},
2,Promise.prototype.then 方法
3,Promise.prototype.catch 方法三种状态:
等待: (pending) , 已完成(fulfilled) , 已拒绝 (rejected)
初识Promise :
//实例化Promise  对象const p = new Promise(function(resolve,reject){setTimeout(function(){//// let data = '数据库中的用户数据';// // 调用resolve方法,promise对象的状态就会变成成功// resolve(data);  let err = '数据读取失败';//调用reject  这个promise 的状态就会变成失败reject(err);},1000);});//调用Promise 的then  方法p.then(function(value){//成功console.log('我打印成功的数据',value)},function(reson){console.error('我打印失败的数据',reson)})

使用Promise 封装Ajax 请求

const p = new Promise((resolve ,reject) => {const xhr = new XMLHttpRequest();xhr.open("Get","http://localhost:8083/personTest/getAllTest");xhr.send();xhr.onreadystatechange = function(){if(xhr.readyState === 4){//判断响应状态码if (xhr.status >= 200 && xhr.status <300){resolve(xhr.response);}else {//如果失败reject(xhr.status)}}}});p.then(function(vallue) {console.log(vallue);},function(reason){console.error(reason);})

Promise – then 方法

<script type="text/javascript">//创建 promise对象const p = new Promise((resolve,reject) =>{setTimeout(()=>{// resolve('用户数据');reject('读取用户数据失败了!');},1000)});//调用then  方法  then  方法的返回结果是promise// 对象,对象的状态是由回调函数的执行结果决定的const result =  p.then(value => {console.log(value);},reason =>{console.warn(reason);});      console.error(result);

Promise —Catch 方法

      const p = new Promise((resolve,reject)=>{setTimeout(()=>{//设置P 对象的状态为失败reject('我出错了,咋办?');},1000)});// p.then(value=>{//     console.log(value);// },reason=>{//     console.warn(reason);// })p.catch(reason => {console.warn(reason);})

Set集合

            let s = new Set();let s2 = new Set(['1','2','3','2'])console.warn(s2, typeof s);console.error(s2.size);s2.add('100');console.log(s2);for (let v of s2){console.log(v)}

Map集合

es 6提供了Map 数据结构,它类似于对象,也是键值对的集合,但是 “键” 的范围不限于字符串,各种类型的值,包括对象,都可以当作键, Map 也实现了iterator 接口,所有可以使用扩展运算符 【 … 】 和 for … of … 进行遍历,Map 的属性 和方法:

size  返回 Map 的元素个i数set   增加一个新元素,返回当前的Map get   返回键名对象的键值has   检测当前Map 中是否包含某个元素,返回 一个 boolen 值clear 清空集合 ,返回 undefined

class 类

知识点:

class 声明类constructor  定义构造函数初始化extends  继承父类super  调用父类的构造方法static  定义静态方法和属性父类方法可以重写//es 6  类的声明//classclass Phone{//构造方法  名字固定constructor(brand,price){this.brand = brand;this.price = price;}//方法call() {console.warn("我乐意打电话!");}}let onePlus = new Phone("iphone",100);console.warn(onePlus.call());console.error(onePlus);

类的静态成员

        class Person{//静态属性属于类而不属于实例化对象static name = '张大炮';static change(){console.warn("可以改变世界");}}let person = new Person();console.log(Person.name)console.log(Person.change());

es6 类继承

 class Phone{constructor(brand,price){this.brand = brand;this.price = price;}call(){console.log("我雷了");}}class smartPhone extends Phone{constructor(brand,price,color,size){super(brand,price);this.color = color;this.size = size;}photo(){console.log("拍照");}}const xiaomi = new smartPhone('xiaomi',799,'yellow',6.7);console.log(xiaomi.photo());
.....

对象方法的扩展

 // Objects.is  判断俩个值是否完全相等// console.warn(Object.is(120,120));// console.log(NaN === NaN);// console.log(Object.is(NaN,NaN));// Objects.assign  对象的合并const config1 = {host: 'localhost',port: '3306'};const config2 = {host : 'xilijun.com',port: '8888'}

模块化

模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来

模块化的好处: 1,防止命名冲突 2,代码复用 3,高维护性

模块功能主要由俩个命令构成: export 和 import

export 命令是用于规定模块的对外接口

.size = size;
}
photo(){
console.log(“拍照”);
}
}
const xiaomi = new smartPhone(‘xiaomi’,799,‘yellow’,6.7);
console.log(xiaomi.photo());


### 对象方法的扩展```javascript// Objects.is  判断俩个值是否完全相等// console.warn(Object.is(120,120));// console.log(NaN === NaN);// console.log(Object.is(NaN,NaN));// Objects.assign  对象的合并const config1 = {host: 'localhost',port: '3306'};const config2 = {host : 'xilijun.com',port: '8888'}

模块化

模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来

模块化的好处: 1,防止命名冲突 2,代码复用 3,高维护性

模块功能主要由俩个命令构成: export 和 import

export 命令是用于规定模块的对外接口

import 命令是用于输入其他模块提供的功能

es6 语法简单使用相关推荐

  1. React项目 --ES6 语法中的class (9)

    上一篇的博客中我们介绍了,如何设置React项目的根目录 连接地址:https://blog.csdn.net/datouniao1/article/details/119505562 要学习Reac ...

  2. vue-cli项目布署问题解决:空白页、静态资源文件404错误、refrenceError:promise未定义(部分浏览器不支持ES6语法)

    (前言:文章记录vue-cli项目打包使用IIS布署遇到的几个错误及解决方式) 首先简单理解webpack打包: 个人理解:项目开发中我们构建 "低耦合高内聚" 的组件/模块来代码 ...

  3. javascript中es6语法

    es6语法简介: // 1.历史:// 1995-----JavaScript诞生// 1997-----ECMAScript标准确立// 1999-----ES3出现,与此同时IE5风靡一时// 2 ...

  4. join为什么每个字符都分割了 js_为什么 webpack4 默认支持 ES6 语法的压缩?

    在专栏课程里,有位同学提到过一个很有意思的问题:"我没装 babel,js 入口里写了个箭头函数,运行 webpack 构建命令后,也成功编译了.这是为什么?".今天就带领大家一起 ...

  5. 【Vue.js 知识量化】ES6 语法积累

    ES6 语法 let / var const 的使用 class.extends.super 箭头函数(arrow function) 模版字符串(template string) 结构(destru ...

  6. VUE 爬坑之旅 -- 用 ES6 语法写一个工具类,并全局引用

    在我前面的有一篇文章里有说过怎么引入外部的 JS 文件,详情见 VUE 爬坑之旅– 如何对公共JS,CSS进行统一管理,全局调用 .这里所说的外部 JS 文件指的是用 ES6 之前的老语法编写的各种 ...

  7. 【ES6 教程】第一章 新的ES6语法04—如何设置函数参数的默认值

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在本节教程中,我们将学习如何在 ES6 中处理 JavaScript 默认参数. TL;DR func ...

  8. ES6的简单的整理与应用

    小伙伴大多数还在使用ES5来进行编写,使用ES5这无可厚非,因为ES5毕竟还是主流,速度也更快,但ES6引入的新特性是ES5无法比拟的,接下来分享一下我掌握的es6 也为自己做个总结 ES6搭建环境( ...

  9. ES6 语法 之 let、const、模板字符串、箭头函数

    ES6 语法 ES6 语法 简介 let 关键字 模板字符串 const 关键字 js中const,var,let区别 箭头函数 ES6 语法 简介 ES6, 全称 ECMAScript 6.0 ,是 ...

最新文章

  1. Nature:拟南芥根系微生物组的结构
  2. 通讯录(容量不可变)
  3. Java中的Set集合类
  4. Python爬虫入门(6):Cookie的使用
  5. 在windows系统和linux系统中查询IP地址命令的不同
  6. java语言数组实现栈的操作_基于自定义的动态数组实现一个栈(Java语言)
  7. Thymeleaf前后端传值 页面取值与js取值
  8. kindeditor上传图片编辑框乱码问题
  9. 行政管理专业考计算机研究生分数,行政管理学,考研,历年分数线是多少?
  10. 【bat】bat批处理 用作为当前目录的以上路径启动了 CMD.EXE。 UNC 路径不受支持。默认值设为 Windows 目录。无法执行共享目录bat脚本处理方法
  11. python识别火车票二维码_python实现12306查询火车票
  12. java中package的运用
  13. 【OJ每日一练】1044 - 下落又弹起的小球
  14. i9级E52450处理器_2019年度十款热门处理器横评 一场没有硝烟的PK
  15. 计算机取代人脑的英语作文,关于电脑和人脑差别的英语作文
  16. 批量提取Word中的图片
  17. 用C语言来输出菱形的形状
  18. 如何下载网站中的图片元素
  19. 如果没有UX经验,如何创建个人UX作品集?
  20. DVWA1.9之文件上传漏洞High级多种方法

热门文章

  1. 过滤百度广告+搜索热点+adblock规则快速入门
  2. html ul怎么去掉内边距,ul默认有内边距
  3. 【C语言】计算个位十位百位思路
  4. autocad java api_在java中实现 AutoCAD api
  5. 模仿QQ空间 网页设计
  6. JAVA基础之类和对象
  7. flutter HEX 色值,转换成RGBO 格式
  8. 署任DS.ENOVIA.DMU.NAVIGATOR.V5-6R2017.GA.WIN64数字制造解决方案
  9. 模式识别与机器学习(作业5)基于PCA–LDA的人脸识别
  10. 《经济的律动》书中的精髓:如何通过“去杠杆”和“互联网金融”现象,更好地理解经济发展的方向?