一、let和const
1.let宣告的變數只在它所在的**塊有效。
2.let宣告的變數僅在塊級作用域內有效。
3.不存在變數提公升。
4.每個let宣告的變數都有各自的作用域。它所宣告的變數一定要在宣告後使用,否則報錯
5.暫時性死區;只要塊級作用域內存在let命令,它所宣告的變數就「繫結」(binding)這個區域,不再受外部的影響
6.不允許重複宣告let不允許在相同作用域內,重複宣告同乙個變數
7.含有塊及作用域 允許塊級作用域的任意巢狀
8.允許在塊級作用域之中宣告函式。
9.do表示式加上do就能得到塊及作用域的返回值
10.有六種宣告方法:var let const import function class
11.es6中頂層物件不是window是global
二、解構賦值
let[a,b,c]=[1,2,3]
let[foo,[[baz],faa]]=[1,[[2],3]]
let[a,y,...z]=[『a』];//a=』a];y=undefinded;z=;
如果等號的右邊不是陣列將會報錯
let[x,y,z]=new set([『a』,』b』,』c』])
只要某種資料結構具有 iterator 介面,都可以採用陣列形式的解構賦值
解構賦值允許指定預設值 let[a=true,a]=[『a』,』b』];
let[a=true,b]=[undefined,』b』];//a=true,b=』b』
let[a=true,b]=[null,』b』];//a=null,b=』b』
let[x=y,y=1]=[1,2]//報錯
let[x=1,y=x]=[2];//x=2,y=2;
let=//
let=//undefined
let=//』b』
三、字串的擴充套件
1.字串的遍歷介面 for...of
2.at(index)
3.includes(string)
4.startswidth(string)//以什麼開頭
5.endswidth(string)//以什麼結尾
6.repeat(number)//重複n遍
7.padstart(number,string)//頭部補全
8.padend(number,string)//尾部補全
四、數值的擴充套件
0b二進位制表示
0o八進位制表示
number.isfinite()//檢查乙個數是否有限
number.isnan()//檢查乙個數是否為nan
number.parseint()
number.parsefloat()
number.isinteger()
number.epsilon
number.issafeinteger()則是用來判斷乙個整數是否落在這個範圍之內範圍在-2^53到2^53之間
math.trunc方法用於去除乙個數的小數部分,返回整數部分
math.sign()math.sign方法用來判斷乙個數到底是正數、負數、還是零。對於非數值,
五、函式的擴充套件
1.能直接為函式的引數指定預設值
2.rest 引數(形式為...變數名)
3.name屬性返回函式名字
4.箭頭函式
5.函式繫結運算子是併排的兩個冒號(::),雙冒號左邊是乙個物件,右邊是乙個函式
foo::bar(...arguments);
六陣列擴充套件
1 .擴充套件運算子
array.push(...items)和add(...numbers)
// es6的寫法function f(x, y, z)
let args = [0, 1, 2];
f(...args);
array.from();
array,of()
陣列複製
const a1 = [1, 2];
const a2 = a1;
a2[0] = 2;
a1 // [2, 2]
const a1 = [1, 2];
const a2 = a1.concat();
a2[0] = 2;
a1 // [1, 2]
合併陣列
// es5[1, 2].concat(more)
// es6[1, 2, ...more]
array.from()array.from方法用於將兩類物件轉為真正的陣列:類似陣列的物件(array-like object)和可遍歷(iterable)的物件
array.of(a,b,c)array.of方法用於將一組值,轉換為陣列。
copywithin()
[1, 2, 3, 4, 5].copywithin(0, 3)
// [4, 5, 3, 4, 5]
上面**表示將從 3 號位直到陣列結束的成員(4 和 5),複製到從 0 號位開始的位置,結果覆蓋了原來的 1 和 2。
find(function(){})陣列例項的findindex方法的用法與find方法非常類似,返回第乙個符合條件的陣列成員
findindex()陣列例項的findindex方法的用法與find方法非常類似,返回第乙個符合條件的陣列成員的位置
fill方法使用給定值,填充乙個陣列。
陣列例項的 entries(),keys() 和 values()
keys()是對鍵名的遍歷、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷。
array.prototype.includes方法返回乙個布林值,表示某個陣列是否包含給定的值,與字串的includes方法類似
陣列的空位指,陣列的某乙個位置沒有任何值。比如,array建構函式返回的陣列都是空位。
七物件的擴充套件
object.is()它用來比較兩個值是否嚴格相等,與嚴格比較運算子(===)的行為基本一致。
object.is('foo', 'foo')
同之處只有兩個:一是+0不等於-0,二是nan等於自身。
object.assign()物件的合併
object.assign(target, source1, source2);
如果undefined和null不在首引數,就不會報錯。
object.assign方法實行的是淺拷貝,而不是深拷貝。
對於這種巢狀的物件,一旦遇到同名屬性,object.assign的處理方法是替換,而不是新增。
object.assign([1, 2, 3], [4, 5])
// [4, 5, 3]
物件的遍歷
for...in
for...in迴圈遍歷物件自身的和繼承的可列舉屬性(不含 symbol 屬性)
object.getprototypeof該方法與object.setprototypeof方法配套,用於讀取乙個物件的原型物件。
箭頭函式
箭頭函式的語法非常簡單,看一下最簡單的箭頭函式表示法
() => console.log('hello')
之前沒有接觸過箭頭函式的人可能會驚訝於其**的簡潔。對比之前如果要寫乙個這樣的函式
function()
和普通函式的區別:
從上面的例子中,我們已經可以看出箭頭函式的優勢。和普通函式相比,
箭頭函式主要就是以下兩個方面的特點
什麼時候不能用箭頭函式1.不繫結this,arguments
2.更簡化的**語法
1.作為物件的方法
最好不要在物件的方法中使用箭頭函式,這樣可能會導致一些問題的產生。
除非你很熟悉箭頭函式。
2.不能作為建構函式
由於箭頭函式的this不繫結的特點,所以不能使用箭頭函式作為建構函式,
實際上如果這樣做了,也會報錯。
3.定義原型方法
super 和 extends 使用新的super和extends關鍵字擴充套件類:constructor(tartnesslevel, energy) }1.super 必須在 this 之前被呼叫
在子類建構函式中,在使用 this 之前,必須先呼叫超級類。
promises in es6
下面是乙個簡單的用settimeout()實現的非同步延遲載入函式:
settimeout(function() , 1000);
var wait1000 = new promise(function(resolve, reject) ).then(function() );
ES6學習總結
1.建立 let x newset 2.特性 對基本資料型別,會自動去重 3.方法 x.add 新增 x.delete 刪除 x.has 刪除是否存在,返回布林 x.clear 清空 x.keys 返回鍵名的遍歷器 x.values 返回鍵值的遍歷器 x.foreach function 遍歷 ar...
ES6學習總結 四
與大多數物件導向語言不同,js建立之初不支援類,在es1 es5很多庫建立了一些工具來讓js顯得好像支援類 直到es6正式引入類。es6類的宣告是以class關鍵字開始後面緊跟類名,類宣告中有constructor方法可以直接定義乙個構造器。例class personclass 類和之前的函式構造器...
ES6學習總結 六
在運用react vue等流行框架到時候,我們發現每個 塊都是分離的,每個js檔案中定義的內容都只在本區域有作用。這就是es6引入的模組化的概念,在此之前,乙個應用的每個js檔案所定義的所有內容都由全域性作用域共享。模組與指令碼的不同 模組的載入方式是與js原先指令碼載入方式有所區別的 1 模組 自...