ECMAScript6 實用筆記

樂前端發表於2018-01-08

ECMAScript6 實用筆記

標籤: ECMAScript6 javascript es6

  • 一、簡介
  • 二、let
  • 三、塊級作用域
  • 四、const 常量
  • 五、陣列解構賦值
  • 六、物件解構賦值
  • 七、字串的擴充套件方法
  • 八、模板字串
  • 九、Math物件的擴充套件方法
  • 十、陣列的擴充套件方法
  • 十一、函式引數預設值
  • 十二、箭頭函式
  • 十三、物件的簡潔表示法
  • 十四、屬性名錶達式
  • 十五、Object.is()
  • 十六、Object.is()
  • 十七、Set資料結構
  • 十八、 展開運算子

一、簡介

1、目前常用的版本是ECMAScript3.0,後來改了名字叫ECMAScript5

ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經在2015年6月正式釋出了。它的目標,是使得 JavaScript 語言可以用來編寫複雜的大型應用程式,成為企業級開發語言。 ECMAScript 和 JavaScript 的關係是,前者是後者的規格,後者是前者的一種實現

2、ECMAScript6的特點:

  • ES6增添了許多必要的特性,例如模組和類,塊級作用域,常量與變數

3、瀏覽器的支援程度

  • http://kangax.github.io/compat-table/es6/

4、可以通過Babel轉碼器把ES6寫的程式碼轉成ES5的,就不用擔心執行環境是否支援 5、chrome下使用ES6為保證可以正常使用大部分語法,需要使用嚴格模式,即在js開始部分加上'use strict' 6、在firefox下使用ES6為保證可以正常使用大部分語法,需要知道測試版本,即在script標籤的type屬性中加上“application/javascript;version=1.7”屬性值

二、let

let 宣告變數的關鍵字 1、在相同的作用域內,let不能重複宣告一個變數(不同的作用域內除外) 2、let宣告的變數不會被預解析 3、暫時性死區

'use strict'        //嚴格模式,即在js開始部分加上'use strict'
console.log(a);		//undefined let宣告的變數不會被預解析
var a=12;
var a='kaivon';
console.log(a);

//console.log(b);		//報錯	不能提前使用
let b=20;
//let b=30;			//報錯 let不能重複宣告一個變數(不同的作用域內除外)
console.log(b);

{
	let str='kaivon';
	console.log(str);
}
複製程式碼

三、塊級作用域

塊級作用域批是的是一對大括號就是一個作用域 塊級作用域可以直接寫一對大括號,以後就不用寫自執行函式了

{
	let a=12;
	function fn(){
		let a=20;
		console.log(a);
	}
	fn();
}
複製程式碼

四、const 常量

const 宣告一個常量,一旦宣告後就不能修改了 1、如果宣告後再去修改的話就會報錯 2、只宣告不賦值也會報錯 3、只能先宣告後使用,不會被提前解析 4、不能重複宣告一個常量 注意:const宣告的物件中的屬性是可以修改的

'use strict'
			
var a=12;
a='kaivon';
console.log(a);

const str='kaivon';
//str=12;		//報錯  宣告後再去修改的話就會報錯

console.log(str);

//const b;			//報錯	只宣告不賦值也會報錯

//console.log(c);	//報錯	只能先宣告後使用,不會被提前解析
const c=20;
//const c='kaivon';	//報錯	不能重複宣告一個常量

//宣告一個物件後,可以對它裡面的屬性進行修改
const obj={
	name:'kaivon'	
};

obj.name='陳學輝';
console.log(obj); //const宣告的物件中的屬性是可以修改的
複製程式碼

五、陣列解構賦值

解構賦值:

按照一定的模式,從陣列或者物件中把資料拿出來,對變數進行賦值

陣列解構賦值:

等號左邊與右邊必需都是陣列,陣列的解構賦值要一一對應。如果對應不上的話就是undefined

'use strict'
/*var a=1;  //傳統宣告變數
var b=2;*/

var [a,b,c]=[1,2,3];  //可以使用陣列進行批量宣告變數
console.log(a,b,c);		//1 2 3

let [x,,y,z]=[1,2,3];   //陣列的解構賦值要一一對應。如果對應不上的話就是undefined
console.log(x,y,z);		//1 3 undefined 

 var [a,[b,c]]=[1,[2,3]];
 console.log(a,b,c);		//1 2 3  可以巢狀

 //可以用來調換兩個值
 var n1=10;
 var n2=15;

 var [n1,n2]=[n2,n1];
 console.log(n1,n2);		//15 10


 //也可以用來取函式的返回值
 function fn(){
 	return ['red','green','blue'];
 }
 var [d,e,f]=fn();

 console.log(e);		//green
複製程式碼

六、物件解構賦值

解構賦值:

按照一定的模式,從陣列或者物件中把資料拿出來,對變數進行賦值

物件解構賦值:

等號左邊與右邊必需都是物件,名字要一一對應,順序不需要對應,對應不上的值結果是undefined

'use strict'
			
var obj={
	name:'kaivon',
	QQ:356985332,
	language:['css','html','js'],
	work:function(){
		console.log('js');
	}
};

var {name,work,QQ,age}=obj; //等號左邊與右邊必需都是物件,名字要一一對應
console.log(name,work,QQ,age);//kaivon 356985332 js undefined


//可以用它來取一個物件的值
function fn(){
	return {
		c1:'red',
		c2:'green',
		c3:'blue'
	}
}

var {c1,c2,c3}=fn();

console.log(c2);		//green

複製程式碼

七、字串的擴充套件方法

  • includes(s) 字串裡面是否包含某個字元,引數是一個字元
  • startsWidth(s) 字串的開始位置的字元是否是引數的,引數是一個字元
  • endsWidth(s) 字串的結束位置的字元是否是引數的,引數是一個字元 以上的幾個方法都返回一個布林值,包含有true,不包括為false
  • repeat(num) 複製字串,引數為數字,表示複製的次數。引數必需是一個正數,其它的就會報錯
'use strict'
var str='kaivon';   //宣告個字串
console.log(str.includes('i'));			//true 字串裡面包含 'i'
console.log(str.includes('b'));			//false 字串裡面不包含 'b'
console.log(str.startsWith('k'));		//true  開始位置包含'k'
console.log(str.endsWith('n'));			//true  結束位置包含'n'

console.log(str.repeat(3));				//kaivonkaivonkaivon 複製三次
//console.log(str.repeat(-1));				//報錯 引數必需是一個正數,其它的就會報錯
//console.log(str.repeat(Infinity));		//報錯 引數必需是一個正數,其它的就會報錯

複製程式碼

八、模板字串

模板字串:字串及資料的拼接方式

1、字串需要用一對反引號包起來,它可以定義多行字串,只用一對反引號 2、要拼進去的資料需要放在${}裡面 3、大括號裡還可以進行運算 4、大括號裡還可以呼叫函式

var obj={
	title:‘心情‘,
	content:’今天很爽,吃了飯,睡了覺,還打了豆豆‘
}
var text=document.getElementById("text");
//text.innerHTML='<h1>'+obj.title+'</h1><p>'+obj.content+'</p>'; //常規的拼接方法

function fn(){
	return '那麼問題來了,豆豆爽麼?';
}

//要拼進去的資料需要放在${}裡面
var str1=`<h1>${obj.title}</h1>  
			<p>${obj.content}</p>`;
			
//大括號裡還可以進行運算
var str2=`<h1>${obj.title+'+1'}</h1>    
			<p>${obj.content}</p>`;

var str3=`<h1>${obj.title+'+1'}</h1>
			<p>${obj.content+fn()}</p>`;    //大括號裡還可以呼叫函式
			
//text.innerHTML=str1;
//text.innerHTML=str2;
//text.innerHTML=str3;
複製程式碼

九、Math物件的擴充套件方法

Math.trunc(num): 去除小數部分,是直接把小數部分去掉

1、對於非數值,先呼叫Number方法把它轉成數字 2、對於空值和無法轉成數字的值,結果是NaN

console.log(Math.trunc(12.74));			//12
console.log(Math.trunc(0.5));			//0
console.log(Math.trunc('36.01'));		//36
console.log(Math.trunc('kaivon'));		//NaN
複製程式碼

Math.sign(num): 判斷一個數是正數還是負數還是0

1、引數為正數,返回1 2、引數為負數,返回-1 3、引數為0,返回0 4、引數為-0,返回-0 5、引數為其它值,返回NaN

console.log(Math.sign(5));				//1
console.log(Math.sign(-5));				//-1
console.log(Math.sign(0));				//0
console.log(Math.sign(-0));				//-0
console.log(Math.sign('kaivon'));		//NaN

複製程式碼

十、陣列的擴充套件方法

Array.from() 把類陣列轉成真正的陣列

任何有length屬性的物件都可以用這個方法轉真正陣列

<ul>
	<li></li>
	<li></li>
	<li></li>
	<li></li>
	<li></li>
</ul>

'use strict'
var lis=document.querySelectorAll("li");
//console.log(lis);
var newLis=[].slice.call(lis); //利用以前的方法將類陣列轉換為陣列

var newLis=Array.from(lis);     //Array.from() 把類陣列轉成真正的陣列
console.log(newLis);			//[li, li, li, li, li]

var str='kaivon';
var newStr=Array.from(str);     //任何有length屬性的物件都可以用這個方法轉真正陣列
console.log(newStr);			//["k", "a", "i", "v", "o", "n"]

//物件身上只要有length屬性就可以呼叫Array.from()把物件轉成陣列,物件中的key必需是從0開始的數字才能轉

var obj={
	0:'red',
	1:'green',
	2:'blue',
	3:'yellow',
	length:4
};
console.log(Array.from(obj)); // ['red','green','blue','yellow']		
複製程式碼

Array.of() 把一組數值轉成真正的陣列

console.log(new Array());		//[]
console.log(new Array(3));		//[, , ,]
console.log(new Array(1,2,3));	//[1, 2, 3]

console.log(Array.of(1));		//[1]
console.log(Array.of(1,2,3));	//[1, 2, 3]

複製程式碼

includes(資料,起始位置) 查詢陣列中有沒有某個資料

var arr=['red','green','blue','yellow'];
console.log(arr.includes('red'));		//true
console.log(arr.includes('pink'));		//false
console.log(arr.includes('green',2));	//false

複製程式碼

遍歷相關

  • for in 迴圈,能夠直接讀取鍵名
  • for of 迴圈,能夠直接讀取鍵值
  •  		它不光可以遍歷陣列或者物件,只要有遍歷介面的物件都可以用它
    複製程式碼
  • keys() 儲存了陣列的所有鍵名
  • values() 儲存了陣列的所有鍵值
  • entries() 儲存了陣列的所有鍵值對
'use strict'
var color=['red','green','blue','yellow'];

//for in
for(var attr in color){
	console.log(attr);	//0 1 2 3 直接讀取鍵名
}

//for of
for(var value of color){
	console.log(value);	//red green blue yellow 直接讀取鍵值
}

//字串也可以使用for of
var str='kaivon';
for(var value of str){
	console.log(value);		//k a i v o n 只要有遍歷介面的物件都可以用它
}


//遍歷keys
for(var key of color.keys()){
	console.log(key);		//0 1 2 3 儲存了陣列的所有鍵名
}

//遍歷values
/*for(var value of color.values()){  儲存了陣列的所有鍵值
	console.log(value);		//red green blue yellow	提示一下,chrom還不支援
}*/

//遍歷entries
for(let [key,value] of color.entries()){
	console.log(key,value);	//0 "red"	 1 "green"	2 "blue"		3 "yellow"  儲存了陣列的所有鍵值對
}
複製程式碼

十一、函式引數預設值

'use strict'
function fn(a,b){
	b=b||'kaivon';  //以往設定預設引數方法
	console.log(a,b);
}
fn('hello');		//hello kaivon
fn('hello','moto');	//hello moto

//引數變數是預設宣告的,不能用let或者const再次宣告
function fn2(a=20,b=10){    //直接將預設引數寫在函式括號中
	//console.log(a,b);		//20 10
	//let a=12;				//報錯
	console.log(a+b);       //30
}
fn2();			//30
fn2(23,45);		//68

複製程式碼

十二、箭頭函式

語法: 1、function用var、let、const來表示 2、引數要寫在第一個等號後面

  • 1、如果沒有引數,需要寫一對空的小括號
  • 2、只有一個引數,那就直接寫,不用加括號
  • 3、引數有多個,需要加一個小括號,引數用逗號隔開
'use strict'
/*function fn1(){
	console.log('kaivon');
}
fn1();*/ //常規寫法

var fn1=()=>console.log('kaivon');  //es5寫法 如果沒有引數,需要寫一對空的小括號
fn1();


let fn2=a=>console.log(a);  //只有一個引數,那就直接寫,不用加括號
fn2('kaivon');			//kaivon

const fn3=(a,b)=>{      //引數有多個,需要加一個小括號,引數用逗號隔開
	let result=a+b;
	console.log(result);
}
fn3(1,2);		//3
			
複製程式碼

十三、物件的簡潔表示法

屬性與方法都可以簡潔表示 , 當屬性與值的變數同名時。

'use strict'
/*function fn(){
	var x=10;
	var y=20;
	function sum(){
		return x+y;
	}
	
	return {x:x,y:y,sum:sum}
}
console.log(fn());*/        //常規獲取函式內部變數及方法


function fn(){              //ES6獲取函式內部變數及方法
	var x=10;
	var y=20;
	function sum(){
		return x+y;
	}
	
	return {
		x,
		y,
		sum(){
			return x+y;
		}
	}
}
console.log(fn());
console.log(fn().sum())			//30


const name = 'Jane';
const age = 20

// es6
const person = {
  name,
  age
}

// es5
var person = {
  name: name,
  age: age
};
複製程式碼

十四、屬性名錶達式

可以把表示式放在中括號裡作為屬性名

'use strict'

let key='interest';

let obj={
	name:'kaivon',
	[key]:'打豆豆',
	['show'](){
		console.log(this.name);
	}
}
console.log(obj);

複製程式碼

十五、Object.is()

比較兩個值是否相等,與===的結果一樣,但是還是有一些區別

  • 返回的結果是一個布林值 區別:
  • 1、+0與-0比較的結果為false
  • 2、NaN與NaN比較的結果為true
'use strict'
console.log(Object.is('kaivon','kaivon'));		//true

console.log(+0===-0);			//true
console.log(Object.is(+0,-0));	//false

console.log(NaN===NaN);			//false
console.log(Object.is(NaN,NaN));	//true
複製程式碼

十六、Object.is()

將一個物件身上的屬性複製到另一個物件身上

  • 至少需要兩個引數
  • 1、第一個引數為合併後的物件
  • 2、從第二個引數開始往後就是所有要合併的物件
  • 3、如果有同名的屬性,後面會把前面覆蓋了
  • 4、如果有巢狀的物件,是覆蓋並不是新增
'use strict'
var obj1={a:1};
var obj2={b:2};
var obj3={a:4,c:3};

Object.assign(obj1,obj2,obj3);
console.log(obj1); //{a:1,b:2,c:3}  //如果有同名的屬性,後面會把前面覆蓋了

//封裝個函式
const merge=(target,...souce)=>{
	Object.assign(target,...souce);
	return target;
}
console.log(merge(obj1,obj2,obj3));		//Object {a: 4, b: 2, c: 3}

//如果有巢狀的物件,是覆蓋並不是新增
var obj4={
	d:{
		e:5
	}
}
var obj5={
	d:{
		f:6
	}
}

console.log(merge({},obj4,obj5)); //{a: 4, b: 2, c: 3}
複製程式碼

十七、Set資料結構

Set 資料結構,類似陣列。所有的資料都是唯一的,沒有重複的值。它本身是一個建構函式

  • size 資料的長度
  • add() 新增一個資料
  • deleate() 刪除一個資料
  • has() 查詢某條資料,返回一個布林值
  • clear() 刪除所有資料
'use strict'
var set=new Set([1,3,4,5,4,3,2]);
set.add(6);     //在資料結構中新增 6 
set.delete(1);  //在資料結構中刪除 1
console.log(set.has(5));    //true 在資料結構中查詢是否有 5
set.clear();    //刪除所有資料內容
console.log(set,set.size);			//Set {1, 3, 4, 5, 2} 5
複製程式碼

十八、 展開運算子

在ES6中用...來表示展開運算子,它可以將陣列方法或者物件進行展開。先來看一個例子它是如何使用的。

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 10, 20, 30];

// 這樣,arr2 就變成了[1, 2, 3, 10, 20, 30];
複製程式碼

當然,展開物件資料也是可以得到類似的結果

const obj1 = {
  a: 1,
  b: 2, 
  c: 3
}

const obj2 = {
  ...obj1,
  d: 4,
  e: 5,
  f: 6
}

// 結果類似於 const obj2 = Object.assign({}, obj1, {d: 4})

作者:這波能反殺
連結:http://www.jianshu.com/p/cfb0893c34f1
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
複製程式碼

針對初學者分享Web前端相關的技術文章、工具資源、javascript、html、css、nodeJs...歡迎關注公眾號“樂前端”、leqianduan

ECMAScript6 實用筆記

相關文章