博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6 新特性(一部分)
阅读量:5771 次
发布时间:2019-06-18

本文共 4595 字,大约阅读时间需要 15 分钟。

ES6的新特性

  • ES6简介:ES6是新一代的JS语言标准,对分JS语言核心内容做了升级优化,规范了JS使用标准,新增了JS原生方法,使得JS使用更加规范,更加优雅,更适合大型应用的开发。学习ES6是成为专业前端正规军的必经之路。不学习ES6也可以写代码打鬼子,但是最多只能当个游击队长

1、 let 和 const

  • var是传统的函数的作用域 ,存在变量提升,即在变量声明之前使用的就是undefined
  • let是不存在变量提升的,但是有块级作用域,暂时性死区
  • const与let类似,但是他定义的变量是不可以修改的
  • 在我们开发的时候,可能认为应该默认使用 let 而不是 var,这种情况下,对于需要写保护的变量要使用 const。 然而另一种做法日益普及:默认使用 const,只有当确实需要改变变量的值的时候才使用 let。这是因为大部分的变量的值在初始化后不应再改变,而预料之外的变量的修改是很多 bug 的源头。
var 的情况 console.log(foo); // 输出undefinedvar foo = 2; let 的情况console.log(bar); // 报错ReferenceErrorlet bar = 2;复制代码

块级作用域

  • 内层作用域和外层作用域不会互相影响
{
{
{
{ let insane = 'Hello World'; {
let insane = 'Hello World'}}}}};复制代码

ES6对于操作字符串和数组上增加了一些方法

数组方法
  • 1、数组的includes方法

    • [1, 2, 3].includes(4)// false

    • [1, 2, NaN].includes(NaN) // true

    • [1, 2, 3].includes(2)// true

  • 2、数组的解构赋值 let [a,b,c]=[1,2,3]

  • 3、数组的去重传统方式vsES6的新方法

varary =[12,24,26,12,24,15,32,15,24];                      varary1 =[];                      for(vari=0;i
  • 4、数组的filter find方法

filter:用来过滤数组(比较常用)

find:也是过滤数组的,但是与filter不同,他返回的过滤出来的第一项,不是数组,而filter是数组

const list = [{
'name':'1',index:1},{
'name':'2'},{
'name':'1'}]let list2 = list.find(i=>i.name==='1')let list3 = list.filter(i=>i.name==='1')console.log(list);//[ { name: '1', index: 1 }, { name: '2' }, { name: '1' } ]console.log(list2)//{ name: '1', index: 1 }console.log(list3)//[ { name: '1', index: 1 }, { name: '1' } ]复制代码
  • 5、some every方法
const arr = [1, 2, 3, 4]arr.every(d => d > 2)
arr.some(d => d > 2)
复制代码

字符串方法

  • 模板字符串

我们拼字符串的时候可以使用模版字符串,用处:拼url给后台传参数的时候

const foo = 'this is a' + example可以优化写法:const foo = `this is a ${example}`复制代码
  • includes()方法 startsWith()方法 endsWidth()方法
let s = 'Hello world!';s.startsWith('Hello') // trues.endsWith('!') // trues.includes('o') // true复制代码

解构赋值

const props = { className: 'tiger-button', loading: false, clicked: true, disabled: 'disabled'}
var loading = props.loading;var clicked = props.clicked;
const { loading, clicked } = props;复制代码

箭头函数(ES6升级重点核心)。箭头函数是ES6核心的升级项之一,箭头函数里没有自己的this,这改变了以往JS函数中最让人难以理解的this运行机制。

主要优化点:

  • 1、箭头函数内的this指向的是函数定义时所在的对象,而不是函数执行时所在的对象。ES5函数里的this总是指向函数执行时所在的对象,这使得在很多情况下this的指向变得很难理解,尤其是非严格模式情况下,this有时候会指向全局对象,这甚至也可以归结为语言层面的bug之一。ES6的箭头函数优化了这一点,它的内部没有自己的this,这也就导致了this总是指向上一层的this,如果上一层还是箭头函数,则继续向上指,直到指向到有自己this的函数为止,并作为自己的this。
  • 2、 箭头函数不能用作构造函数,因为它没有自己的this,无法实例化。
  • 3、也是因为箭头函数没有自己的this,所以箭头函数 内也不存在arguments对象。(可以用扩展运算符代替)
  • 4、 函数默认赋值。ES6之前,函数的形参是无法给默认值得,只能在函数内部通过变通方法实现。ES6以更简洁更明确的方式进行函数默认赋值。

import 和export

  • import引入的模块是静态加载(编译阶段加载)而不是动态加载(运行时加载)。

  • import引入export导出的接口值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。

Promise 异步操作

Promise 的then方法:

p.then(function (value) {     
}, function (error) {
});then()方法传递的两个参数中:
复制代码

错误处理:

var p = new Promise(function (resolve, reject) {    // ...    if(/* 异步操作成功 */){        resolve(ret);    } else {        reject(error);    }});p.then(function (value) {    // 完成态}, function (error) {    // 失败态});复制代码

Promise的常见应用

  • 使用Promise封装一个ajax请求:
function getURL(url){    return new Promise(function(resolve,reject){        var req=new XMLHttpRequest();        req.open('GET',url,true);        req.onload=function(){            if (req.status==200) {                resolve(req.responseText);            }else{                reject(new Error(req.statusText))            }        };        req.onerror=function(){            reject(new Error(req.statusText));        };        res.send();    })}复制代码
  • 异步加载图片
let preloadImage=(path)=>{    return  new  Promise(function(resolve,reject){        let img=new Image();        img.onload=resolve;        img.onerror=reject;        img.src=path;    })}复制代码

Promise.all()

  • Promise.all()方法用于将多个Promise实例,包装成一个新的Promise实例,例如:
var p = Promise.all([p1, p2, p3])复制代码

新的Promise实例p的状态由p1, p2, p3决定:

当p1, p2, p3的状态都为完成态时,p为完成态。

p1, p2, p3中任一一个状态为失败态,则p为失败态。

例子:

let a = new Promise((resolve, reject) => {     setTimeout(() => {       resolve(2)     }, 2000)   }) let b = new Promise((resolve, reject) => {     setTimeout(() => {       resolve(3)     }, 2000)   }) Promise.all([a, b]).then( (ret) => console.log(ret)) //2秒后,注意这里返回的是数组 [2,3].catch( err => console.log(err.toString()));复制代码

async await :实际上是generator的语法糖,主要用来解决异步问题的

async function test() {  const data = await axios.get('https://randomuser.me/api/')  console.log(data)}// 等同于function test() {  axios.get('https://randomuser.me/api/').then(res => console.log(res)) // axios 也是 promise 对象}// 结合try/catch async function test() {  try {    const data = await axios.get('https://randomuser.me/api/')    console.log(data)  } catch (err) {    console.log(err)  }}复制代码

参考网站:

转载于:https://juejin.im/post/5c22e8f0e51d451c82525eaf

你可能感兴趣的文章
L104
查看>>
分镜头脚本
查看>>
链表基本操作的实现(转)
查看>>
邮件发送1
查看>>
[转] libcurl异步方式使用总结(附流程图)
查看>>
编译安装LNMP
查看>>
[转]基于display:table的CSS布局
查看>>
crm 02--->讲师页面及逻辑
查看>>
AS3.0 Bitmap类实现图片3D旋转效果
查看>>
Eigen ,MKL和 matlab 矩阵乘法速度比较
查看>>
带三角的面包屑导航栏(新增递增数字)
查看>>
Web应用程序安全与风险
查看>>
codeforces 984 A. Game
查看>>
CSS居中
查看>>
One Person Game(概率+数学)
查看>>
CodeForces 258B Little Elephant and Elections :于1-m中找出七个数,使六个数里面的4和7个数比第七个数严格小:数位dp+dfs...
查看>>
MAP
查看>>
手把手教你测——上网快鸟
查看>>
用javascript获取地址栏参数
查看>>
一起谈.NET技术,你应该知道的15个Silverlight诀窍
查看>>