愈來愈多的框架推薦使用ES6進行高效開發,node也早已支持ES6,那不如就偷偷瞄一眼兒這性感的「編程語言」?
獻給初學者javascript
檢測本地是否支持ES6環境
簡便方法:直接在瀏覽器調試工具下嘗試輸入Promise(ES6的新API,用於異步事件的處理),若是能打印出其構造函數,則支持(若是真有瀏覽器光是支持了Promise而不支持ES6,那我服!)前端
在開發環境裏面使用ES6
webpack+babel 做爲轉譯工具進行ES6到ES5的編譯
wp的配置詳見
《webpack的安裝及配置》java
安裝插件:
babel-loadernode
npm install babel-loader
babel-corewebpack
npm install babel-core
babel-es2015-transformes6
npm install babel-babel-transform
在webpack.config.js的module屬性中的loaders字段加入web
{ test: /\.js$/, loader: 'babel' }
在項目根目錄下建立配置文件.babelrcnpm
{ 'presets': ['es2015'] }
class
類!編程
咱們經過一個demo來初見一下js的class瀏覽器
class Student { getName() { console.log( ' This is es6 style ' ); } //注意:這裏不用逗號 getClass() { console.log( 'gp02' ); } }
let
塊級做用域變量聲明
之前經過var聲明的變量由於變量提高的緣故,若非在函數做用域內聲明,則爲全局變量,而let則是解決了這個問題
一個實用場景:
//<=ES5 for ( var i = 0; i < 10; i ++ ) { } console.log( i );//9 變量提高到了全局 //ES6 for ( let ii = 0; ii < 10; i ++ ) { } console.log( ii );//undefined 變量只在for循環塊級做用域中生效
Q:如何造成塊級做用域?
大括號包圍則造成一個塊級做用域,如函數、循環、判斷、選擇等結構
{ let a = 0; } console.log( a );//undefined let k = 0; console.log( k );//0;
const
靜態變量
const NAME = 'Samuel'; NAME = 'Lucifer'; console.log( NAME ); //報錯,靜態變量不能被從新複製,它至關於一個常量
箭頭函數
用=>
來表示匿名函數function() {}
若是沒有=>
後沒有{}
,則表示返回=>
後的內容
const A=(a, b)=>a+b;
等價於
const A = function(a, b) { return a+b; }
方便回調函數的定義
fetch(url).then((data)=>{ console.log( data ); //從寫法上來講也體現了回調函數的意義,「拿到data了,接着作點什麼」 });
模塊化
ES5的模塊化
關鍵字:require module exports
遵循CommonJS規範
詳見:前端模塊化的那些事兒
ES6的模塊化
關鍵字:import(導入) export(導出)
module.js
var number = 20; //經過export導出 export default number
import.js
//經過import引入module模塊 import num from './module.js' //這裏是module.js的相對路徑 //num對應module的出口number console.log( num );//20
第一眼差很少看到這兒吧。別色眯眯的不想走啦!
行行行,再看一眼:
瞧得咋地?A bright new future is coming!(半夜看的同窗,對不起!)4不4很酥胡~。:)解決了之前那些無處安放的對象和做用域問題。要是您忘不了,以後還有ES6的API。。。