et
let 宣告的變數只在 let 命令所在的**塊內有效。
基本用法
a // 報錯 referenceerror: a is not defined
//不同作用域無法訪問
let 是在**塊內有效,var 是在全域性範圍內有效:
a // referenceerror: a is not defined
b // 1
不能重複宣告
let 只能宣告一次 var 可以宣告多次:
let a = 1;let a = 2;
var b = 3;
var b = 4;
a // identifier 'a' has already been declared
b // 4
不存在變數提公升
let 不存在變數提公升,var 會變數提公升:
console.log(a); //referenceerror: a is not definedconsole.log(b); //undefined
var b = "banana";
const
const 宣告乙個唯讀的常量,一旦宣告,常量的值就不能改變。
const pi = "3.1415926";pi = 123456 // 報錯
暫時性死區:
var pi = "a";if(true)
es6 明確規定,**塊內如果存在 let 或者 const,**塊會對這些命令宣告的變數從塊的開始就形成乙個封閉作用域。**塊內,在宣告變數 pi 之前使用它會報錯。
注意要點
const 如何做到變數在宣告初始化之後不允許改變的?
其實 const 其實保證的不是變數的值不變,而是保證變數指向的記憶體位址所儲存的資料不允許改動。此時,簡單型別和復合型別儲存值的方式是不同的。對於簡單型別(數值 number、字串 string 、布林值 boolean),值就儲存在變數指向的那個記憶體位址,因此 const 宣告的簡單型別變數等同於常量。而複雜型別(物件 object,陣列 array,函式 function),變數指向的記憶體位址其實是儲存了乙個指向實際資料的指標,所以 const 只能保證指標是固定的,至於指標指向的資料結構變不變就無法控制了,所以使用 const 宣告複雜型別物件時要慎重。
在es6中 按照一定的模式 從陣列中提取數 對對應的變數進行賦值的操作 就叫做解構賦值
本質上講 解構賦值 就是模式匹配
在解構中,有下面兩部分參與:
解構的源,解構賦值表示式的右邊部分。解構的目標,解構賦值表示式的左邊部分。
var [a, b, c] = [1, 2, 3];// a = 1
// b = 2
// c = 3
可以巢狀
var [a, b, c] = [1, [2], 3];// a = 1
// b = [2]
// c = 3
不完全解構
var [a,b,c] = [1,2]// a = 1
// b = 2
// c = undefined12
34var [a,b,c] = [1,2,3]
// a = 1
// b = 2
//這個也屬於不完全解構 多的值直接忽略12
34擴充套件運算子
let [a, ...b] = [1, 2, 3];
//a = 1
//b = [2, 3]12
3支援預設值
let[a,b = "abc"] = [1];
// a = 1
// b = "abc"12
3
陣列的拷貝
var arr = [1,2,3]var arrsp = [...arr]
// arrsp = [1,2,3]12
3
字串等
在陣列的解構中,解構的目標若為可遍歷物件,皆可進行解構賦值。可遍歷物件即實現 iterator 介面的資料。
let [a, b, c, d, e] = 'hello';// a = 'h'
// b = 'e'
// c = 'l'
// d = 'l'
// e = 'o'12
3456
屬性的簡介表示方法
es6在{} 允許直接寫入變數名 解析的時候 變數名作為屬性名 變數值作為屬性值
const age = 12;const name = "amy";
const person = ;
person //
//等同於
const person =
方法名也可以簡寫
const person =
}person.sayhi(); //"hi"
//等同於
const person =
}person.sayhi();//"hi"
屬性名表示式
es6允許用表示式作為屬性名,但是一定要將表示式放在方括號內。
const obj =
}obj.hello(); //"hi"
注意點:屬性的簡潔表示法和屬性名表示式不能同時使用,否則會報錯。
const hello = "hello";const obj = ;
obj //syntaxerror: unexpected token }
const hello = "hello";
const obj = ;
obj //
object.assign()
用於用來合併物件的
let target = ;let object2 = ;
let object3 = ;
object.assign(target,object2,object3);
// 第乙個引數是目標物件,後面的引數是源物件
target; // , null);
var pi = "a";
if(true)
ES6知識點總結
面向過程和物件導向的對比 面向過程 物件導向 物件 物件是由屬性和方法組成的 類 class 在 es6 中新增加了類的概念,可以使用 class 關鍵字宣告乙個類,之後以這個類來例項化物件 物件導向的思維特點 抽取 抽象 物件共用的屬性和行為組織 封裝 成乙個類 模板 對類進行例項化,獲取類的物件...
ES6知識點簡單總結
let宣告的變數只能在所處遇到的快級有效。不存在變數提公升。暫時性死區,不受外部 影響。在乙個大括號中使用let關鍵字宣告的變數才具有塊級作用域,var關鍵字不具有這個特點 具有塊級作用域。使用const關鍵字宣告的常量必須賦值。常量賦值後值不能更改。varletconst 函式級作用域 塊級作用域...
es6常用知識點總結
1.定義變數的方式 let 1 沒有變數提公升 var具有變數提公升 即在當前作用域的最上面定義這個變數 但不賦值 例 console.log x var x 20 顯示undefined console.log m let m 100 報錯 2 let不可以重複宣告 例 var x 10 var ...