现在看招聘网站上的要求,作为前端er~都要熟悉甚至精通(滑稽脸)es6,项目中也经常用,啥let,const,尤其是用react的同学,肯定对解构赋值不会陌生,今天逛淘宝前端的博客,看到一篇名为Es6你可能不知道的事,感觉平时对Es6的理解还是太浅了。。。
我学习es6是跟阮一峰老师的教程学习的,真的是巨详细。
 
一、let 和 const
 
不存在变量提升,let改变了语法行为,所声明的变量一定要在声明之后使用否则会报错
只要使用了let命令,所声明的变量就绑定了这一区域,不再受外部作用域的影响,区块中只要使用了const和let命令,就在一开始形成了封闭作用域,凡在声明之前使用这些变量就会报错
function bar(x=y, y=2) {
return [x, y]
}
bar() 会报错
块级作用域,es5函数只能在块级作用域和顶层作用域声明,不能再块级作用域中声明
函数声明语句的行为类似于let。在块级作用域中相当let
ES6 允许在块级作用域中声明函数,但是考虑到块级作用域行为差异太大 ,应该避免在块级作用域内声明函数,如果确实需要,也应该写成函数表达式,而不是函数声明式,而且只能是在使用大括号的块级作用域
 
const命令
const是一个只读的常量,一旦声明常量的值就不会改变,const只声明不赋值报错,声明的变量也不会提升,同样存在暂时性死区,只能在声明的位置后面使用
本质上并不是变量的值不会改动,而是变量的内存地址不会改动,const只能保证指针是固定的,数据解构是不可变的,但是对象本身是可变的 
 
我们平时使用的时候第一印象:let是用来替换var的,常量一般用const(以前这么理解的请举手),但其实是const定义的是不可重新定义赋值的值, 所以他的应用场景应该很广,包括常量、配置项以及引用的组件、定义大部分的中间组件,反之就let而言,应用场景会很少,我们只会在loop循环中才会用到(而且由于const由于不可以重新赋值的特性,所以可以做更多语法静态分析方面的优化,从而有更高的执行效率)
 
二、箭头函数
 
我非常喜欢箭头函数,因为语法简单,形态优雅
我在在前面写的关于this的文章中,提到了要注意箭头函数的this指向,箭头函数没有独立的执行上下文,所以内部引用this对象会直接访问父级,当年我们用过的中间变量(self, that, me, _that, _me, Self...),如果只有一个参数时,可以省略相应的括号
尤其是在连续的promise链式调用的过程中,可以使代码更加优雅
 
三、解构赋值
 
按照一定模式,从数组和对象中提取值,对变量进行赋值,成为解构赋值
如果解构不成功,会等于undefined
不完全解构赋值。只匹配一部分等号左边的数组,解构可以成功
解构赋值右边如果不是数组或者说不能遍历循环的解构,报错
对象的解构赋值的内部赋值机制,先找到同名属性,再赋给对应的变量,真正被赋值的是后者,而不是同名的属性
例子
{first: f, last: l} = { first:"hello", last :"world"}
f hello
l world
和数组一样,解构也可以用于嵌套解构的对象、
对象的解构可以指定默认值,默认值生效的条件是,对象的属性值严格等于undefined
如果解构失败,变量的值等于undefined
注意:如果将已经声明的变量用于解构赋值,必须非常小心
for example
let x;
{x} = {x:1} 

这样写会报错,因为js引擎将{x}理解成一个代码块,从而发生语法错误,只有不将大括号写在行首,避免js将其理解成代码块,才能解决这个问题,可以将他写在一个圆括号里

对象的解构赋值,等号左边可以什么都不写,虽然没有意义,但是语法是对的
 
ES6的规则是,只有可能导致解构的歧义,就不得使用圆括号,所以只要有可能就不在模式中中使用圆括号
不能使用圆括号的情况
变量声明语句不能使用
函数参数不能使用
赋值语句的模式
 
解构赋值的用途:
1、交换变量的值 [x, y] = [y, x]
2、可以使用解构赋值返回多个值,返回一个数组或者一个对象,取出值就很方便。就是return 数组或者对象
3、函数参数的定义,可以方便的将参数和传入的值对应起来
4、提取json
5、函数参数的默认值
6、遍历map解构
7、输入模块的指定加载方式,解构赋值会很清晰
 
四、promise

promise不只是一个对象,一个语法,更是一种异步编程方式的变化

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise对象有以下两个特点。

(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

小结:es6还有很多新的特性,比如模板字符串,正则扩展就不在这具体整理了,es6的内容可能有些琐碎,所以学习的时候也要有些耐心

参考资料

淘宝前端 es6你不知道的那些事

es6 阮一峰教程

Es6的那些事的更多相关文章

  1. ES6 初体验 —— gulp+Babel 搭建ES6环境

    ES6已经火了好久了,我却一直没有在项目中尝试过使用ES6写代码,只是写过几个Demo,在大型项目中使用ES6这件事,我一直不太敢做.最近公司要求做一个小的H5活动专题,我想不如就在这个小项目中使用E ...

  2. ES6 你可能不知道的事 – 基础篇

    序 ES6,或许应该叫 ES2015(2015 年 6 月正式发布),对于大多数前端同学都不陌生. 首先这篇文章不是工具书,不会去过多谈概念,而是想聊聊关于每个特性 你可能不知道的事,希望能为各位同学 ...

  3. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  4. ES6 Set和Map的那点事

    Set  1.Set特点 类数组 新增数据结构 是构造函数 成员值唯一  注重独一无二的特征 2.Set实例的常用方法 console.log('------------Set操作方法-------- ...

  5. Webpack+React+ES6开发模式入门指南

    React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...

  6. es6之let和const

    在javascript中,我们都知道使用var来声明变量.javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量. 函数级作用域会导致一些问题就是某些代码块内的变量 ...

  7. ES6之const命令

    一直以来以ecma为核心的js始终没有常量的概念,es6则弥补了这一个缺陷: const foo='foo'; foo='bar';//TypeError: Assignment to constan ...

  8. ES6新特性概览

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  9. ES6新特性之 promise

    新的ES6中引入了promise的概念,目的是让回调更为优雅.层层嵌套的回调会让javascript失去美感和可读性,同时javascript也推荐采用链式的方式去书写函数调用.于是Promise就应 ...

随机推荐

  1. 阻止事件的默认行为,例如click <a>后的跳转~

    在W3C中,使用preventDefault()方法: 在IE中,使用window.event.returnValue = false.

  2. Java入门系列-09-循环结构

    这篇文章为你搞懂5个问题 while 循环如何使用 do-while 循环的使用 for 循环的使用 break.continue 的使用 循环结构的嵌套使用 生活中有很多事情需要我们重复的去做,比如 ...

  3. C# 使用cookie实现登录

    首先,我们需要做的是什么? 我们成功登录之后,跳转到主界面,然后主界面的登录按钮变成头像啥的.下一次打开网页就要判断有没有登录过,有cookie就不需要登录,直接显示头像 1.成功登录后,客户端请求服 ...

  4. MarkDown 语言简单使用

    # Markdown file ![alt img is error](http://cdn2.jianshu.io/assets/web/logo-58fd04f6f0de908401aa561cd ...

  5. scss-@mixin传参

    混合器一个很重要特性就是可以传递参数,可以根据不同场景来定制css代码的复用.极大提高了混合器的适用性,看如下scss代码实例: @mixin makeradius($radius) { border ...

  6. scss-注释

    在scss中有两种注释方式 原生css的注释多行注释: /* *  注释的内容 */ 单行注释:// 注释内容一致延续到行末. 在尽可能的情况下,多行注释会被保留在输出的CSS中,而单行注释会被删除.

  7. cf1064D. Labyrinth(01BFS)

    题意 题目链接 给出一个\(n \times m\)的网格,给出起始点,要求向左走不超过\(L\)步,向右走不超过\(R\)步,求出能遍历到哪些点 Sol 一个很直观的想法,BFS的时候状态里记录下还 ...

  8. css 简单梯形

    通过css2D变形我们可以轻松得到平行四边形,那么通过此技巧可以得到梯形吗? no! 不过我们可以通过3D旋转得到类似这样的效果: transform:perspective(0.5em)  rota ...

  9. win10下clodeblocks编译C语言乱码

    打开settings->compile,在other compiler options添加下面两行代码: -fexec-charset=GBK-finput-charset=UTF-8

  10. javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

    赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...