可参考阮一峰的ECMAScript 6 入门html
var s1 = `abc`
var obj={ name:"",age:5 }; var s1 ="我叫:"+obj.name+",今年:"+obj.age+"岁。"
var obj={name:"张三",age:18} var {name,age}=obj; //生成2个变量, // name值来自于obj.name、 // age值来自于obj.age var {name:title}=obj; //生成一个变量:title,值来自于obj.name
function f1(obj){ console.log(obj.age); console.log(obj.height) } //等价于 function f1({ age,height }){ console.log(age); console.log(height) } f1({age:5,height:180})
var a = 3 ; var c = 10; var b = { a,c } ; //b对象有一个a属性,a属性的值,来自于a变量 , //还有一个c属性,c属性的值来自于c变量 console.log(b)
使用背景:es6的
优势:arguments是伪数组,而rest参数是真数组前端
function fn(...args){ console.log(args); //数组:[1,2,3,4,5] } fn(1,2,3,4,5)
场景:用于替换匿名函数
基本用法:vue
//匿名函数 div.onclick=function(){ console.log("你好") } //箭头函数 div.onclick=()=>{ console.log("你好") }
有一个参数的箭头函数node
var fn=(a)=>{ console.log("abc"); } //等价于: var fn=a=>{ console.log("abc"); }
有2个及更多参数的箭头函数react
var f=(a,b,c)=>{ console.log("abc") }
箭头函数和普通匿名函数有哪些不一样?jquery
var obj1={ age:5,gender:"男" } var obj2={ ...obj1 } var obj3={ ...obj1 , age:10 }
为何要有promise:解决回调地狱的问题webpack
//跟之前的if条件地狱很像 // if(){ // if(){ // if(){ // } // } // } $.get("/getUser",function(res){ $.get("/getUserDetail",function(){ $.get("/getCart",function(){ $.get("/getBooks",function(){ //... }) }) }) }) //node开发:读取文件;开个服务器、接收一个请求、请求路径、访问数据库
var promise=new Promise((resolve,reject)=>{ //b 把须要执行的异步操做放在这里 $.get("/getUser",res=>{ //获取数据的异步操做已经执行完毕了,等待下一步的执行,经过执行resolve函数,告诉外界你能够执行下一步操做了 //c、 resolve(res) //而执行的下一步操做,其实就是写在then的回调函数中的 }) }) //a、 promise.then(res=>{ //d、执行后续的操做 console.log(res); })
new Promise((resolve,reject)=>{ $.get("/getUser",res=>{ resolve(res) }) }).then(res=>{ //用户基本信息 return new Promise(resolve=>{ $.get("/getUserDetail",res=>{ resolve(res) }) }) }).then(res=>{ //用户详情 return new Promise(resolve=>{ $.get("/getCart",res=>{ resolve(res) }) }) }).then(res=>{ //购物车信息 })
方式一git
new Promise((resolve,reject)=>{ $.ajax({ url:"/getUser", type:"GET", success:res=>{ resolve(res); }, error:res=>{ reject(res) } }) }).then(resSuccess=>{ //成功的返回值 },resError=>{ //失败的返回值 })
方式二:es6
new Promise((resolve,reject)=>{ $.ajax({ url:"/getUser", type:"GET", success:res=>{ resolve(res); }, error:res=>{ reject(res) } }) }).then(resSuccess=>{ //成功的返回值 }).catch(resError=>{ //失败的返回值 })
async实际上是一个promise的语法糖github
async function get(){ console.log('开始执行'); var res = await timer() console.log('执行结束:',res); } function timer(){ return new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve("你好"); },1000) }) } get();
Generator是ES6的新特性,经过yield关键字,可让函数的执行流挂起,那么便为改变执行流程提供了可能。
class Person { constructor(name) { this.name=name; } } //至关于: function Person(name){ this.name=name; }
class Person { constructor(name,age) { this.name=name; this.age=age; } //定义方法 say() { console.log("你们好,我叫:"+this.name+",今年:"+this.age+"岁"); } travel(){ console.log("坐着飞机去巴厘岛"); } }
class Animal { constructor(){ } static born(){ console.log("小呆萌出生了") } } //访问静态方法 Animal.born();
//父类 class Person { constructor(name){ this.name=name; } } //Student类继承自Person类 class Student extends Person { //构造方法 constructor(name,grade){ //规定:必须调用父类构造方法,若是不调用就会报错 super(name); //调用父类构造方法,从而给子类的实例添加了name属性 this.grade=grade; } }
[1,3,5].map(function(value,index){}) [1,3,5].map((value,index)=>{}) //之前变量和字符串拼接,如今用模板字符串
本地调试,会受浏览器同源策略的影响,须要开启web服务才能打开
<script type="module"> //导入模块 </script>
导出模块:
//common.js export default { name:"abc" }
导入模块:(
//b.js import common from "common.js" console.log( common.name ) //"abc"
//person.js export const jim = { country :"France" } export const tony = { color:"gray" } //默认的导出 export default { name:"abc" }
//index.js import person , { jim , tony } from "person.js" //person:{ name:"abc" } //jim:{ country :"France" } //tony:{ color:"gray" }
//person.js export const tony = { color:"gray" } export { tony as Tony } //index.js import { Tony } from "person.js" import { Tony as man} from "person.js" console.log(man) //{ color:"gray" }
//日期控件 var DatePicker = (function(){ return { init(){} } })(); //Header // tabbar // login //Content // sidebar // table //Footer var KTV=(function(){ return { pay(){}, xiaofei(){} } })()
//一、经过script标签导入requirejs源文件 //二、编写模块文件,基本格式以下: //home.js define([],function(){ console.log('home模块'); }) //user.js define([],function(){ console.log('user模块'); }) //三、首页调用模块: require(["home","product.js"],function(){ })
require.config({ baseUrl:'js', paths:{ 'jquery':'jquery.min.js', } })
//user.js: define([],function(){ return { init(){}, addUser(){} } }) //首页:运行时加载 require(["cart"],function(cart){ cart.init(); cart.addUser(); })
注意:通常在导入模块的时候,须要将有返回值的模块
在[前面]
导入,无返回值的模块
在[后面]
导入
//userAdd.js define([],function(){ return { init(){ console.log("添加用户"); } } }) //userEdit.js define([],function(){ return { init(){ console.log("编辑用户"); } } }) //user.js define(["userAdd","userEdit"],function(userAdd,userEdit){ return { init(){ console.log("用户初始化"); }, add(){ userAdd.init(); }, edit(){ userEdit.init(); } } }) //首页: require(["user"],function(user){ user.init(); user.add(); user.edit(); })
if ( typeof define === "function" && define.amd ) { define([], function() { return jQuery; } ); }
相似的还有:echarts
通常用于配置第三方模块,好比jquery、bootstrap、zepto等等
require.config( paths:{ jquery:"js/lib/jquery-1.11.min", zepto:"js/lib/zepto.min", bootstrap:"assets/bootstrap/js/bootstrap.min" } ) define(["jquery","zepto"],function($,$$){}) require(["jquery","bootstrap"],function($){})
https://github.com/requirejs/requirejs/wiki/Plugins
define(["require","a"],function(require){})
require("a")()
#
开头#
开头