ES6/ES2015,,在ES5的基礎上擴展了很多新的功能,在使用的時候要慎重,因為有一部分js代碼在部分瀏覽器是不兼容的,但是所有寫在服務器端的代碼基本上都支持ES6的寫法.
新特性:
一.開啟嚴格模式
在函數的第一行加上"use strict"字符串,如果需要整個js代碼中開啟,就在js第一行加上這一段字符.
設置"嚴格模式"的目的,主要有:
- 清除javascript語法的一些不合理,不嚴謹之處,減少怪異行為
- 清楚代碼運行的一些不安全之處,保證代碼運行的安全.
- 提高編譯效率,增加運行速度
- 為未來新版本的javascript做好鋪墊.
注意:
在正常模式下可以直接使用為未聲明的變量 嚴格模式不行
name="jhon";
console.log(name);
//輸出jhon
在正常模式下一個方法可以有很多個同名參數 嚴格模式不行
function fn(aa,aa,bb){ return aa+aa+bb; } console.log(fn("11","22","33")); //輸出222233
二.定義變量使用let(類似var)
javascript中的var:
- var聲明的變量會有變量提升
- var沒有塊級作用域
- var可以多次重復定義一個變量
這些聲明在后天開發語言是不允許的,為了規范變量的聲明ES6退出了新的關鍵字let代替var的聲明變量.
let的特點:
- let聲明的變量不會有變量提升
- let存在塊級作用域
- let不能多次重復定義變量
三.定義常量const
常量是指不會改變的數據.
常量const的特點:
- 值不能再改變
- 常量具有塊級作用域
- 不要在塊級作用域中聲明常量
- 沒有變量提升,要先聲明后使用
- 不可以聲明同名的常量
- 一定要賦初始值,否則會報錯
- 如果聲明的是常量是一個對象,只要對象的地址不改變,其內部的屬性可以改變
四.字符串的擴展
如果要判斷字符串”hello word”中是否存在”word”,用字符串中的方法只有indexOf,在ES6中又為我們提供了其它的方法:
- includes()->返回布爾值,用於判字符串是否包含某些字符串
- startsWith()->返回布爾值,用於判斷字符串是否以某些字符開頭
- endWith()->返回布爾值,用於判斷字符串是否以繆謝字符結尾.有兩個參數(字符串,數值)->("o",3)用於判斷下標3的字符串是否是"0".
- repeat()->傳入一個數字,將字符串重復數字對應的次數返回.
注意:傳入的是正小數,數字會被向下取整;傳入字符串類型的數值("5"),可以,傳入("5a")不可以當空處理;不能傳入負數.
五.模塊語法:"模塊字符串"
結構:`模板內容${code}`
注意:code可以是變量,方法名,js表達式
1 //變量
2 let name='jack'; 3 let temp=`我叫${name}`; 4 //temp==>我叫jack
5
6
7 //表達式
8 let a=1; 9 let b=1; 10 let temp=`a+b的和是$(a+b)`; 11 //temp==>2
12
13 //方法
14 function getName(){ 15 return 'jack'; 16 } 17 let temp=`我叫${getName()}`; 18 //temp==>jack
六.箭頭函數 0=>{}
為了方便書寫,es6規定了一種新的寫法來簡化匿名函數:去掉function改為=>,結構為()=>{}
過程一:去掉function關鍵字
arr.each(function(m,n){
console.log(n)
});
得到:arr.each((m,n)=>{console.log(n);});
過程二:如果只有一句代碼可以去掉大括號和return關鍵字
得到: arr.each((m,n)=>console.log(n));
過程三:如果參數只一個,可以將參數中的小括號去掉。
得到: arr.each(n=>console.log(n))
過程四:如果代碼只有一句,並且代碼中return,可以去掉return.
得到: arr.sort((n,m)=>n-m);
注意:箭頭函數沒有固定的寫法,它是根據當前方法的參數和方法的返回值來的
箭頭函數中this指向問題:
-
箭頭函數沒有自己的this,函數體內部寫的this,會順着作用域去找最近真實存在的this。
-
箭頭函數內部的this是定義時所在的對象,而不是使用時所在的對象,並且不會改變。
- 箭頭函數不能作為構造函數
-
箭頭函數中不存在arguments,箭頭函數中的argument指向的是外層的arguments.
未完,待續...