拥抱ES6 (一)
擁抱ES6 (一)
- let和const
- 解構賦值
- …語法
let和const
- let,const和var一樣,都可用來聲明變量。但let,const聲明的變量在提升過程中不會像var那樣進行初始化賦值undefined。
- 此外,let,const所聲明的變量存在塊級作用域和暫時性死區,能減少全局變量的污染。
- 值得注意的是,let和const定義的變量在使用前必須先聲明,否則報錯。
- 而對于const來說,定義常量這種說法更為確切,且值定義后無法改變(引用類型除外–內容可變,但引用不變)
example-01-塊級作用域
{var a=1;let b=2;}console.log(a);//1console.log(b);//報錯 b is not defined- 為了更好的理解塊級作用域,請看下邊這兩段代碼
- 這里不會預期輸出0,1,2,是因為用var聲明的變量沒有塊級作用域,i在循環外也有效。
- 等執行完,僅僅只有全局有一個i,這個i此時已經是3。
- 把上邊var定義的i換成let定義試試看
- 這就是塊級作用域的體現,此時在循環外訪問i是訪問不到的。每次循環i都各自保存自己的值,所以輸出符合預期。
example–02-不初始化賦值
// var 的情況console.log(a); // undefinedvar a= 1;// let 的情況console.log(b); // 報錯 b is not definedlet b= 2;// const 的情況// const聲明一個只讀的常量,不可變。const c=1;//報錯 Assignment to constant variable.c=2;//const定義的常量必須初始化賦值const d;// SyntaxError: Missing initializer in const declaration console.log(d)解構賦值
- ES6 允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構(Destructuring)。
- 注意模式匹配,只要等號兩邊的模式相同,左邊的變量就會被賦予對應的值。
- 如果解構不成功,變量的值就等于undefined。
example–03-數組的解構賦值
//快速為變量賦值 var [a, b, c] = [1, 2, 3]; console.log(a);//1 console.log(b);//2 console.log(c);//3//注意模式匹配 var [a, [[b], c]] = [1, [[2], 3]]; console.log(a)// 1 console.log(b)// 2 console.log(c)// 3// 可以只獲取自己想要的 var[ , , c] = ["a", "b", "c"]; console.log(c) // cvar [x, , z] = [1, 2, 3]; console.log(x)// 1 console.log(z)// 3example-04-字符串的解構賦值
const [a, b] = '高芊'; console.log(a) // 高 console.log(b) // 芊example-05-函數的解構賦值
function add([x, y]){return x + y; }add([1, 2]); // 3…語法
- 對于數組和對象而言,…運算符超級好用,可將參數列表或對象屬性一一拆解,也可重新拼湊。
- 值得注意的是:對象的解構與數組有一個重要的不同,數組的元素是按次序排列的,變量的取值由它的位置決定;
- 對象的屬性沒有次序,變量必須與屬性同名,才能取到正確的值。
example–06-…語法
//一一拆解后拼湊 var obj={name:"高芊",like:"編程"} var selfObj={...obj}//相當于拷貝 console.log(selfObj)//{name:"高芊",like:"編程"} //一一拆解 var { a, b} = { a: "aaa", b: "bbb" }; console.log(a) // aaa console.log(b) // bbb//此時的b實際時剩余項組成的數組var [a, ...b] = [1, 2, 3, 4]; console.log(a) // 1 console.log(b) // [2, 3, 4]example-07-復雜對象解構
- 注意,此時p是一種模式,不是變量,故不會被賦值
- 如果p也要作為變量賦值,可以寫成下面這樣。
- 下面代碼有4次解構賦值,分別是對loc、start、line、column四個屬性的解構賦值。
- 注意,最后一次對line,column屬性的解構賦值之中,只有line,column是變量,loc和start都是模式,不是變量。
字符串方法擴展
- es5只有indexOf方法,可以用來確定一個字符串是否包含在另一個字符串中。
- ES6 又提供了三種新方法:includes, startsWith,endsWith。
- 此外,還有兩個常用于數據處理的padStart,padEnd
- includes():返回布爾值,判斷是否找到了參數字符串。
- startsWith():返回布爾值,判斷參數字符串是否在原字符串的頭部。
- endsWith():返回布爾值,判斷參數字符串是否在原字符串的尾部。
- padStart():前補位 param1:最大長度; param2:未達到最大長度情況下補充的內容
- padEnd():后補位 param1:最大長度; param2:未達到最大長度情況下補充的內容
example-08-字符串擴展方法
var s = 'Hello world!';console.log(s.startsWith('Hello')) // trueconsole.log(s.endsWith('!')) // trueconsole.log(s.includes('o')) // true時間處理
function dateFormat(date=new Date()) {let y = date.getFullYear().toString();let m = (date.getMonth() + 1).toString().padStart(2,'0');let d = date.getDate().toString().padStart(2,'0');let h = date.getHours().toString().padStart(2,'0');let M = date.getMinutes().toString().padStart(2,'0');let s = date.getSeconds().toString().padStart(2,'0');return y + m + d + " " +h + ":" + M + ":" +s; } console.log(dateFormat()) //20191208 12:39:38 注意日期:08 前置補了一個0總結
- 上一篇: bcdedit添加linux引导,强大的
- 下一篇: Excel中的LEN和LENB,VBA中