React-redux-webpack项目总结之用到的Es6基本语法
2016-12-04 15:53
811 查看
上个暑假在公司实习的一个app商城项目,十一月初才上线,也没来得及总结学到的东西,不过有关于前端这些日新月异的东西,说不定等我毕业又是一番新气象,不过就像我宇哥说的核心思想都不会发生太大变化,学会触类旁通咯~,不知道沉浸java后台的我还有没有机会在将来继续开启我前端菜鸟历程了。。。还是想了想把学到的一些东西做一些沉淀,不管将来用不用的到,也希望能对大家有所帮助。
本文先整理一下用到的Es6的一些新特性,貌似React挺拥抱Es6
1. let
let只在所在的代码块中有效
不存在变量声明提升
不能重复定义相同变量名
2、const
3、箭头函数
ES6中新增的箭头操作符=>便有异曲同工之妙。它简化了函数的书写。操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs
Es6和Es5的对比
4、Class
ES6中添加了对类的支持,引入了class关键字,其实class在JavaScript中一直是保留字
5、默认参数值
6、不定参数
不定参数的格式是三个句点后跟代表所有不定参数的变量名
7、拓展参数
它允许传递数组或者类数组直接做为函数的参数
8、for of 值遍历
9、块级作用域
10、import
11、Promises
Promises是处理异步操作的一种模式,之前在很多三方库中有实现,比如jQuery的deferred 对象。当你发起一个异步请求,并绑定了.when(), .done()等事件处理程序时,其实就是在应用promise模式。
在 Promise 对象当中有两个重要方法————resolve 和 reject。
resolve 方法可以使 Promise 对象的状态改变成成功,同时传递一个参数用于后续成功后的操作,在这个例子当中就是 Hello World! 字符串。
reject 方法则是将 Promise 对象的状态改变为失败,同时将错误的信息传递到后续错误处理的操作。
Promise 的三种状态
上面提到了 resolve 和 reject 可以改变 Promise 对象的状态,那么它究竟有哪些状态呢?
Promise 对象有三种状态:
异步操作返回一个promise对象。因此我们在那个promise对象中调用then,并且传给它一个回调函数;then也会返回一个promise。当异步操作结束,它将给promise装上数据。然后(第一次)回调被调用,数据被作为参数传递进去。如果回调不含有返回值,then返回的promise将会立即不带值组装。如果回调返回的不是一个promise,那么then返回的 promise将会立即装载那个数值。如果回调返回一个promise(像例子中的),那么then返回的 promise将等待直到我们回调返回的promise被完全装载。一旦我们回调的 promise被装载,它装载的值(本例中就是data2)将会被提交给then的promise。然后then中的promise装载了data2
Promise.all
Promise.all 可以接收一个元素为 Promise 对象的数组作为参数,当这个数组里面所有的 Promise 对象都变为 resolve 时,该方法才会返回。
本文先整理一下用到的Es6的一些新特性,貌似React挺拥抱Es6
1. let
let只在所在的代码块中有效
不存在变量声明提升
不能重复定义相同变量名
for (var i = 0; i < 10; i++) {} console.log(i); //10 for(let j = 0; j < 10; j++) {} console.log(j);// Error: j is not define
2、const
大部分与let差不多。 const (只读)(一旦声明必须赋值) const MAX = 123; MAX = 1; //转码阶段就爆错了。
3、箭头函数
ES6中新增的箭头操作符=>便有异曲同工之妙。它简化了函数的书写。操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs
// 六种语言中的简单lambda表达式函数示例 function (a) { return a > 0; } // JS [](int a) { return a > 0; } // C++ (lambda (a) (> a 0)) ;; Lisp lambda a: a > 0 # Python a => a > 0 // C# a -> a > 0 // Java
Es6和Es5的对比
// ES5 var selected = allJobs.filter(function (job) { return job.isSelected(); }); // ES6 var selected = allJobs.filter(job => job.isSelected());
4、Class
ES6中添加了对类的支持,引入了class关键字,其实class在JavaScript中一直是保留字
//类的定义 class Animal { //ES6中新型构造器 constructor(name) { this.name = name; } //实例方法 sayName() { console.log('My name is '+this.name); } } //类的继承 class Programmer extends Animal { constructor(name) { //直接调用父类构造器进行初始化 super(name); } program() { console.log("I'm coding..."); } }
5、默认参数值
function sayHello(name){ //传统的指定默认参数的方式 var name=name||'dude'; console.log('Hello '+name); } //运用ES6的默认参数 function sayHello2(name='dude'){ console.log(`Hello ${name}`); } sayHello();//输出:Hello dude sayHello('Wayou');//输出:Hello Wayou sayHello2();//输出:Hello dude sayHello2('Wayou');//输出:Hello Wayou
6、不定参数
不定参数的格式是三个句点后跟代表所有不定参数的变量名
//将所有参数相加的函数 function add(...x){ return x.reduce((m,n)=>m+n); } //传递任意个数的参数 console.log(add(1,2,3));//输出:6 console.log(add(1,2,3,4,5));//输出:15
7、拓展参数
它允许传递数组或者类数组直接做为函数的参数
var people=['Wayou','John','Sherlock']; //sayHello函数本来接收三个单独的参数人妖,人二和人三 function sayHello(people1,people2,people3){ console.log(`Hello ${people1},${people2},${people3}`); } //但是我们将一个数组以拓展参数的形式传递,它能很好地映射到每个单独的参数 sayHello(...people);//输出:Hello Wayou,John,Sherlock //而在以前,如果需要传递数组当参数,我们需要使用函数的apply方法 sayHello.apply(null,people);//输出:Hello Wayou,John,Sherlock
8、for of 值遍历
var someArray = [ "a", "b", "c" ]; for (v of someArray) { console.log(v);//输出 a,b,c }
9、块级作用域
其实这也解释了为什么let、const在自己所在的代码块有效了。 { var b = 1; { var b = 10; console.log(b); //10 } console.log(b); //10 } { let a = 1; { let a = 2; console.log(a); //2 } console.log(a); //1 }
10、import
1、ES6引入了自己的模块系统。通过export导出,import导入。 2、与CommonJS不同的是,它是获取模块的引用,到用的时候才会真正的去取值。 3、例如student.js中: let student = [ { name: 'xiaoming', age: 21, }, { name: 'xiaohong', age: 18 } ] export default student; // 这种导出方式,你可以在import时指定它的名称。 4、在app.js中我们就可以这样用: import StudentList from './student.js'; //指定名称 console.log(StudentList[0].name); //xiaoming
11、Promises
Promises是处理异步操作的一种模式,之前在很多三方库中有实现,比如jQuery的deferred 对象。当你发起一个异步请求,并绑定了.when(), .done()等事件处理程序时,其实就是在应用promise模式。
在 Promise 对象当中有两个重要方法————resolve 和 reject。
resolve 方法可以使 Promise 对象的状态改变成成功,同时传递一个参数用于后续成功后的操作,在这个例子当中就是 Hello World! 字符串。
reject 方法则是将 Promise 对象的状态改变为失败,同时将错误的信息传递到后续错误处理的操作。
Promise 的三种状态
上面提到了 resolve 和 reject 可以改变 Promise 对象的状态,那么它究竟有哪些状态呢?
Promise 对象有三种状态:
Fulfilled 可以理解为成功的状态 Rejected 可以理解为失败的状态 Pending 既不是 Fulfilld 也不是 Rejected 的状态,可以理解为 Promise 对象实例创建时候的初始状态
异步操作返回一个promise对象。因此我们在那个promise对象中调用then,并且传给它一个回调函数;then也会返回一个promise。当异步操作结束,它将给promise装上数据。然后(第一次)回调被调用,数据被作为参数传递进去。如果回调不含有返回值,then返回的promise将会立即不带值组装。如果回调返回的不是一个promise,那么then返回的 promise将会立即装载那个数值。如果回调返回一个promise(像例子中的),那么then返回的 promise将等待直到我们回调返回的promise被完全装载。一旦我们回调的 promise被装载,它装载的值(本例中就是data2)将会被提交给then的promise。然后then中的promise装载了data2
// Let's look at using promises asyncOperation() .then(function(data){ // Do some processing with `data` return anotherAsync(); }) .then(function(data2){ // Some more processing with `data2` return yetAnotherAsync(); }) .then(function(){ // Yay we're finished! });
Promise.all
Promise.all 可以接收一个元素为 Promise 对象的数组作为参数,当这个数组里面所有的 Promise 对象都变为 resolve 时,该方法才会返回。
var p1 = new Promise(function (resolve) { setTimeout(function () { resolve("Hello"); }, 3000); }); var p2 = new Promise(function (resolve) { setTimeout(function () { resolve("World"); }, 1000); }); Promise.all([p1, p2]).then(function (result) { console.log(result); // ["Hello", "World"] });
相关文章推荐
- React-redux-webpack项目总结之用到的Es6基本语法
- react+redux+webpack移动端项目总结
- React-redux-webpack项目总结之reduce、action、store、components 是如何开车的
- webpack3+react16+react-router3+react-redux实战项目
- react,redux,webpack前端项目
- 利用 React/Redux/React-Router 4/webpack 开发大型 web 项目时如何按需加载
- [React项目总结] 基于 webpack 搭建前端工程基础篇
- 从头创建一个基于 React, webpack, babel 的模板项目
- 基于Redux的ReactNative项目开发总结(一)
- 学习 React(jsx语法) + es2015 + babel + webpack
- 软测经验1——web项目测试经验总结(基本流程、回归测试、测试方案)
- ES6 + Webpack + React + Babel 如何在低版本浏览器上愉快的玩耍(上)
- redux 配合 react 在项目中的使用(个人总结与备忘)
- webpack构建react项目和处理组件的依赖
- react+redux教程(一)connect、applyMiddleware、thunk、webpackHotMiddleware
- 基于Redux的ReactNative项目开发总结(一)
- react,react native,webpack,ES6,node.js----------今天上午学了一下node.js
- webpack踩坑之路——构建基本的React+ES6项目
- 整理的react相关的一些学习地址,包括 react-router、redux、webpack、flux
- React项目实战【2】--webpack