OKR
ES6
Javascript
直接從程式碼就可以看出差異,var可以重複宣告,但let比較嚴謹會提醒不能重複宣告。
var a = 1;
console.log(a);
var a = 2;
console.log(a);
result:
1
2
---
let b=1;
console.log(b);
let b=2;
console.log(b);
result:
1
Identifier 'b' has already been declared //提示說已經被宣告了
被{}包起來區塊範圍裡面,來看看var與let的差異:
{
var a = "我是a";
let b = "我是b";
console.log('a列印結果:',a);
console.log('b列印結果:',b);
}
result
a列印結果: 我是a
b列印結果: 我是b
若是今天將console.log移到外面的話,會發生什麼事情?
{
var a = "我是a";
let b = "我是b";
}
console.log('a列印結果:',a);
console.log('b列印結果:',b);
result
a列印結果: 我是a
ReferenceError: b is not defined //結果b會被顯示沒有被宣告,代表let撰寫比較嚴謹
依據上述比較let與var之間的差異,可宣告變數/得到相同結果,但最大的差別是在於let所宣告的變項只有在{}代碼區塊(block scope)內有效。
在之前ES5在放入Html內容,必須要一行一行加入,在ES6的模版字符串(template literal)是使用反引號``放入html內容。
在之前,若行數很多的話容易不小心打錯內容,除了很麻煩,也不易閱讀
let addHtml_es5 = '<header>' +
'<div class="banner">' +
'</div>'
+ '</header>'
現在ES6使用反引號快速解決這樣的狀況,列印結果,更方便的是他會幫你保留所有換行和空行,顯示結果跟你的輸入排版差不多。
let addHtml_es6 = `
<header>
<div class="banner">
</div>
</header>
`
//print result
<header>
<div class="banner">
</div>
</header>
若是有嵌入宣告變數的寫法
使用方式為${…}
let youtubeSrc = 'https://www.youtube.com/embed/lJIrF4YjHfQ?autoplay=1';
$('.embed-responsive').append(`<iframe class="youtube_frame" style="width:100%;height:100%;" src="${youtubeSrc}" frameborder="0" scrolling="no" allowfullscreen></iframe>`);
//print result
<iframe class="youtube_frame" style="width:100%;height:100%;" src="https://www.youtube.com/embed/lJIrF4YjHfQ?autoplay=1" frameborder="0" scrolling="no" allowfullscreen>
</iframe>
Constants
,中文叫常數,有點像使用let宣告的變數。const MY_FAV = 7;
class MyClass{
constructor(){
}
}
ES6的新寫法,使用三個點(…),主要是連接陣列使用,範例如下:
const params = [ "hello", true, 7 ]
const other = [ 1, 2, ...params ]
這樣就會將params裡的陣列複製到other裡面
[ 1, 2, "hello", true, 7 ]
若複製陣列,再傳值進去也不會受到影響
const arr = [1,2,3]
const arr2 = [...arr]
arr2.push(4)
//push()向數組的末尾加一個或多個元素
//所以列印結果為[1,2,3,4]
把某個陣列展開,然後傳入函式作為傳入參數值
function sum(a, b, c) {
return a + b + c
}
const args = [1, 2, 3]
sum(…args)
//列印結果為1+2+3=6