现在看招聘网站上的要求,作为前端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. Linux进程优先级和nice值

    在学习了linux的完全公平调度算法(CFS)后,记录下学习轨迹 这篇文章主要讲述,完全公平调度算法的工作方式,和一些调度知识 我们可以通过ps -l看到当前正在运行的进程的详细信息其中 F:表示进程 ...

  2. 转载:解决IE下a标签会触发window.onbeforeunload的问题

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  3. PAT 1064 Complete Binary Search Tree

    #include <iostream> #include <cstdio> #include <cstdlib> #include <vector> # ...

  4. Implementation: Quick Sort 2014-08-19

    #include <stdio.h> void print(int *a, int start , int end); void quick_sort(int *a, int start, ...

  5. 【转载】win7mysql5.7.18免安装配置教程

    闲着没事,装个mysql试试,小编以前都是用的linux,感觉mysql安装就是傻瓜式操作啊,第一次在windows系统上装,感觉出了很多问题,现在将整个过程分享给大家,希望大家在安装的时候少走弯路. ...

  6. 原生js实现雪花飘落效果

    雪花飘落的效果实现步骤:1.使用setInterval定时器每800毫秒创建一个雪花:2.把每一个雪花作为参数传进动态下落的方法中即可. <style> *{padding: 0;marg ...

  7. CSS样式编写案例

    1.制作如图三角形效果: 步骤一:将右侧盒子设置为相对定位 步骤二:在右侧盒子里面新建个子盒子,设置宽高相等,为正方形,绝对定位 步骤三:将绝对定位的盒子用CSS3旋转属性旋转 2.制定如图的序列号 ...

  8. wxpyhon 对话框

    Python内置了好多定义好了的对话框供我们使用,这里先介绍三个最常用的: 1 Message dialog 2 Text entry 3 Choosing from a list 当然python还 ...

  9. struts1.3.10 和 hibernate 3.3.2 一起加载时 出现javax.servlet.ServletException: java.lang.NoSuchMethodError: antlr.collections.A 错误

    struts1.3.10 需要导入一个 antlr-2.7.2.jar 的jar包: hibernate 3.3.2 需要导入一个 antlr-2.7.6.jar 的jar包,这两个包有冲突,所以需要 ...

  10. svn图标显示不正常,文件夹显示但文件不显示svn图标

    svn图标显示不正常,文件夹显示但文件不显示svn图标   这个问题的引发是自己造成的,使用myEclipse时progress会卡在 refresh svn status cache (0%)这里, ...