ES6語法新特性

一、let和const命名

let命令是用來申明變量的斥赋。用法和var類似,不同的是let作用域只在{}之間滑绒,var會進行申明置頂,全局有效隘膘。

for(var i=0;i<10;i++){
    //do something
}
console.log(i);//10

//let
for(let j=0;j<10;j++){
    //do something
}
console.log(j);//Uncaught ReferenceError: j is not defined

var進行變量提升后的結(jié)果見下

var i;
for(i=0;i<10;i++){
    //do something
}
console.log(i);//10

let的使用有幾點需要注意

  • 同一作用域不允許重復(fù)申明
  • for循環(huán)還有一個特別之處,就是設(shè)置循環(huán)變量的那部分是一個父作用域弯菊,而循環(huán)體內(nèi)部是一個單獨的子作用域纵势。

const用來定義常量的,重復(fù)賦值的會報錯钦铁,先定義,再使用

二育瓜、數(shù)據(jù)的結(jié)構(gòu)賦值

1、數(shù)組

let [a,b,c] = [1,2,3];//完全解構(gòu) ok
let [e,f,g] = [4,5];//不完全解構(gòu) ok
let [h, ,j]= [5,6,7];//不完全解構(gòu) h=5,j=7
let [l,m] = [7,,9];//不完全解構(gòu) l=7, m=undefind
let l,m = [7,,9]; //不完全解構(gòu) l=undefind,m=[7, ,9] 避免

解構(gòu)是可以指定默認(rèn)值的恋脚,例:let [l,m=8] = [7,,9]

2焰手、對象

ES6還可以進行對象的解構(gòu),數(shù)組的解構(gòu)按順序船响,對象的解構(gòu)按鍵

let { bar, foo } = { foo: "aaa", bar: "bbb" };
foo // "aaa"
bar // "bbb"

值得注意的是let { bar, foo }只是一種簡寫躲履,補全后是

let { bar:bar, foo:foo } = { foo: "aaa", bar: "bbb" };
foo // "aaa"
bar // "bbb"

bar:bar 第一個是匹配模式,第二個才是賦值的

let { bar:bar1, foo:foo } = { foo: "aaa", bar: "bbb" };
foo // "aaa"
bar1 // "bbb"
bar // Uncaught ReferenceError: bar is not defined

3工猜、字符串

字符串也可以解構(gòu)賦值。這是因為此時史侣,字符串被轉(zhuǎn)換成了一個類似數(shù)組的對象魏身。

const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

類似數(shù)組的對象都有一個length屬性,因此還可以對這個屬性解構(gòu)賦值箭昵。

let {length : len} = 'hello';
len // 5

4、用途

#######交換變量的值

let a = 1;
let b = 2;
[a,b] = [b,a];

既方便又簡捷

從函數(shù)返回多個值
// 返回一個數(shù)組
function example() {
  return [1, 2, 3];
}
let [a, b, c] = example();

函數(shù)只能返回一個參數(shù)掉房,通過這個可以進行多個參數(shù)的接收

提取 JSON 數(shù)據(jù)
let jsonData = {
    id: 42,
    status: "OK",
    data: [867, 5309]
};
let { id, status, data: number } = jsonData;
console.log(id, status, number);// 42, "OK", [867, 5309]

上面代碼可以快速提取 JSON 數(shù)據(jù)的值慰丛,尤其有用瘾杭。

函數(shù)參數(shù)的默認(rèn)值
jQuery.ajax = function (url, {
  async = true,
  beforeSend = function () {},
  cache = true,
  complete = function () {},
  crossDomain = false,
  global = true,
  // ... more config
} = {}) {
  // ... do stuff
};

指定參數(shù)的默認(rèn)值,就避免了在函數(shù)體內(nèi)部再寫var foo = config.foo || 'default foo';這樣的語句贤笆。

輸入模塊的指定方法

加載模塊時,往往需要指定輸入哪些方法芥永。解構(gòu)賦值使得輸入語句非常清晰。

const { SourceMapConsumer, SourceNode } = require("source-map");

3板辽、模板字符串

s6模板字符簡直是開發(fā)者的福音啊棘催,解決了ES5在字符串功能上的痛點。

第一個用途醇坝,基本的字符串格式化。將表達式嵌入字符串中進行拼接画畅。用${}來界定宋距。

//ES5 
var name = 'lux'
console.log('hello' + name)
//es6
const name = 'lux'
console.log(`hello ${name}`) //hello lux

第二個用途,在ES5時我們通過反斜杠()來做多行字符串或者字符串一行行拼接乡革。ES6反引號(``)直接搞定。

// ES5
var msg = "Hi \
man!
"
// ES6
const template = `<div>
    <span>hello world</span>
</div>`

4嘁傀、Spread Operator 展開運算符

ES6中另外一個好玩的特性就是Spread Operator 也是三個點兒...接下來就展示一下它的用途视粮。

組裝對象或者數(shù)組

//數(shù)組
const color = ['red', 'yellow']
const colorful = [...color, 'green', 'pink']
console.log(colorful) //[red, yellow, green, pink]

//對象
const alp = { fist: 'a', second: 'b'}
const alphabets = { ...alp, third: 'c' }
console.log(alphabets) //{ "fist": "a", "second": "b", "third": "c"

}

5、import和export

import導(dǎo)入模塊蕾殴、export導(dǎo)出模塊

//全部導(dǎo)入
import people from './example'

//有一種特殊情況,即允許你將整個模塊當(dāng)作單一對象進行導(dǎo)入
//該模塊的所有導(dǎo)出都會作為對象的屬性存在
import * as example from "./example.js"
console.log(example.name)
console.log(example.age)
console.log(example.getName())

//導(dǎo)入部分
import {name, age} from './example'

// 導(dǎo)出默認(rèn), 有且只有一個默認(rèn)
export default App

// 部分導(dǎo)出
export class App extend Component {};

以前有人問我茴肥,導(dǎo)入的時候有沒有大括號的區(qū)別是什么荡灾。下面是我在工作中的總結(jié):

1.當(dāng)用export default people導(dǎo)出時瞬铸,就用 import people 導(dǎo)入(不帶大括號)

2.一個文件里础锐,有且只能有一個export default。但可以有多個export拦宣。

3.當(dāng)用export name 時信姓,就用import { name }導(dǎo)入(記得帶上大括號)

4.當(dāng)一個文件里,既有一個export default people, 又有多個export name 或者 export age時财破,導(dǎo)入就用 import people, { name, age } 

5.當(dāng)一個文件里出現(xiàn)n多個 export 導(dǎo)出很多模塊,導(dǎo)入時除了一個一個導(dǎo)入靡羡,也可以用import * as example

6俊性、類和繼承

Class 可以通過extends關(guān)鍵字實現(xiàn)繼承略步,這比 ES5 的通過修改原型鏈實現(xiàn)繼承定页,要清晰和方便很多。

class Point {
}
class ColorPoint extends Point {
  constructor(x, y, color) {
    super(x, y); // 調(diào)用父類的constructor(x, y)
    this.color = color;
  }

  toString() {
    return this.color + ' ' + super.toString(); // 調(diào)用父類的toString()
  }
}

上面代碼中杭煎,constructor方法和toString方法之中卒落,都出現(xiàn)了super關(guān)鍵字,它在這里表示父類的構(gòu)造函數(shù)也切,用來新建父類的this對象腰湾。

子類必須在constructor方法中調(diào)用super方法雷恃,否則新建實例時會報錯费坊。這是因為子類自己的this對象,必須先通過父類的構(gòu)造函數(shù)完成塑造导犹,得到與父類同樣的實例屬性和方法羡忘,然后再對其進行加工,加上子類自己的實例屬性和方法卷雕。如果不調(diào)用super方法,子類就得不到this對象滨嘱。

參考文獻

http://es6.ruanyifeng.com/#docs/intro

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浸间,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子囊扳,更是在濱河造成了極大的恐慌兜看,老刑警劉巖锥咸,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搏予,死亡現(xiàn)場離奇詭異弧轧,居然都是意外死亡,警方通過查閱死者的電腦和手機精绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門捺典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人襟己,你說我怎么就攤上這事∏嬖。” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵贝室,是天一觀的道長。 經(jīng)常有香客問我捡偏,道長峡迷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任彤避,我火速辦了婚禮夯辖,結(jié)果婚禮上琉预,老公的妹妹穿的比我還像新娘蒿褂。我一直安慰自己,他們只是感情好榨咐,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布谴供。 她就那樣靜靜地躺著,像睡著了一般数焊。 火紅的嫁衣襯著肌膚如雪崎场。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天谭跨,我揣著相機與錄音,去河邊找鬼蛮瞄。 笑死谆扎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堂湖。 我是一名探鬼主播状土,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伺糠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了彼乌?” 一聲冷哼從身側(cè)響起渊迁,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤灶挟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稚铣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡耕漱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年螟够,在試婚紗的時候發(fā)現(xiàn)自己被綠了峡钓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妓笙。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡寞宫,死狀恐怖拉鹃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膏燕,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布焕蹄,位于F島的核電站阀溶,受9級特大地震影響鸦泳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜做鹰,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一鼎姐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饭尝,春花似錦、人聲如沸钥平。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捷兰。三九已至,卻和暖如春秘蛇,著一層夾襖步出監(jiān)牢的瞬間友扰,已是汗流浹背彤叉。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工秽浇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甚负,地道東北人柬焕。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓斑举,卻偏偏與公主長得像病涨,于是被迫代替她去往敵國和親富玷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一雀鹃、ES6簡介 ? 歷時將近6年的時間來制定的新 ECMAScript 標(biāo)準(zhǔn) ECMAScript 6(亦稱 ...
    一歲一枯榮_閱讀 6,071評論 8 25
  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,781評論 0 1
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)黎茎,也就是一...
    悟名先生閱讀 4,148評論 0 13
  • 1傅瞻、新的聲明方式 以前我們在聲明時只有一種方法,就是使用var來進行聲明嗅骄,ES6對聲明的進行了擴展焙畔,現(xiàn)在可以有三種...
    令武閱讀 1,007評論 0 7
  • 三,字符串?dāng)U展 3.1 Unicode表示法 ES6 做出了改進宏多,只要將碼點放入大括號澡罚,就能正確解讀該字符。有了這...
    eastbaby閱讀 1,532評論 0 8