可參考阮一峯的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")()
#
開頭#
開頭