ES6有很多比ES5更加好用的語法!
在ES5,使用var
宣告變數
在ES6,使用let
宣告變數
javascript
//var name = "kitty"; //在ES5,用var宣告變數
let name = "kitty"; //在ES6,用let宣告變數
console.log(name);
console
"kitty"
undefined
let
與var
相比的好處let
的變數僅能作用在宣告的範圍裡面迴圈
內部)
for (let i = 0; i < 3; i++ ) {
console.log(i);
}
console
0
1
2
let
如果未事前先宣告,就會出現錯誤
for (let i = 0; i < 3; i++ ) {
}
console.log(i);
console
"error"
"ReferenceError: i is not defined
at nororos.js:7:38
at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:13924
at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:10866"
為全域變數,商業邏輯出錯時不容易debug
for (var i = 0; i < 3; i++ ) {
}
console.log(i);
等於
var i;
for (i = 0; i < 3; i++ ) {
}
console.log(i);
結果皆為:
console
3
let
和var
同時使用,變數會被全域的var
決定javascript
var i; //全域
for (let i = 0; i < 3; i++ ) {
}
console.log(i);
console
undefined //而不是3
let
與var
不同之處:變數的有效範圍不同設定為let
的變數,就算在迴圈內數值被改變,也只會作用在區域範圍內,不會影響到外面
let i = 100;
for (let i = 0; i < 3; i++) {
console.log('hi');
}
console.log(i);
console
"hi"
"hi"
"hi"
100 //仍然是100
設定為var
的變數,在任何區域重新給值時,數值都會被改變
var i = 100;
for (var i = 0; i < 3; i++) {
console.log('hi');
}
console.log(i);
console
"hi"
"hi"
"hi"
3 //100被改為3
let i = 10;
for (let i = 0; i < 5; i++) {
console.log('hi');
}
console.log(i);
console
"hi"
"hi"
"hi"
"hi"
"hi"
10 // 迴圈印5次hi,let變數仍為10
var i = 10;
for (var i = 0; i < 5; i++) {
console.log('hi');
}
console.log(i);
console
"hi"
"hi"
"hi"
"hi"
"hi"
5 // 迴圈印5次hi,var變數被改為5
常數不可被更改
const age = 18;
console.log(age); //印出18
age = 20; //TypeError: 型別錯誤,不可指定變數值給常數
const age = 20; //SyntaxError: 變數名稱已經被宣告過了
console
18
"error"
"TypeError: Assignment to constant variable.
at nororos.js:5:5
at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:13924
at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:10866"
"error"
"SyntaxError: Identifier 'age' has already been declared
at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:13924
at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:10866"
let { key, key }
= 變數名稱
javascript
var hero = { name: '孫悟空', age: '18' };
let { name, age } = hero; // 從var指定為let變數
console.log(name);
console.log(age);
console
"孫悟空"
"18"
``
圍住整體,${變數}
帶到字串裡javascript
let name = "kitty";
console.log(`Hello, ${name}`); //"Hello, kitty"
+
串接字串與變數javascript
var name = "kitty";
console.log("Hello, " + name); //"Hello, kitty"
console
"Hello, kitty"
e.g. 假設有一html語法如下:
<a href="#" id="zone">Hello Zone</a>
=>
代替函式function()
javascript
document.querySelector('.zone').addEventListener('click', evt => {
console.log('我被按了!');
});
function內的程式碼如果只有一行,可以連大括弧都省略
document.querySelector('.zone').addEventListener('click', evt => console.log('我被按了!'););
function()
javascript
document.querySelector('.zone').addEventListener('click', function(evt){
console.log('我被按了!');
});
var friends = ['Ross','Joey','Chandler','Monica','Phoebe','Rachel'];
forEach()
javascript
friends.forEach(function(x){
console.log(x);
});
用箭頭函數改寫
friends.forEach( x => {
console.log(x);
});
fuction內的程式碼只有一行,所以可以省略大括弧,變得更精簡
friends.forEach(x => console.log(x));
for迴圈
javascript
for (var i = 0; i < friends.length; i++){
console.log(friends[i]);
}
console
"Ross"
"Joey"
"Chandler"
"Monica"
"Phoebe"
"Rachel"
若物件的key與value的名稱設定相同,可只寫一次
function profile(firstName, lastName, age){
return {
firstName,
lastName,
age,
fullName: function() {
return lastName + firstName;
}
}
}
let p1 = profile('悟空', '孫', 18);
console.log(p1.fullName());
function profile(firstName, lastName, age){
return {
firstName: firstName,
lastName: lastName,
age: age,
fullName: function() {
return lastName + firstName;
}
}
}
var p1 = profile('悟空', '孫', 18);
console.log(p1.fullName());
console
"孫悟空"
class-base
類別裡面可寫constructor
建構子和一般的function
Syntax Sugar語法糖衣
class Pokemon {
constructor(name, skill) {
this.name = name;
this.skill = skill;
}
attack(){
console.log('攻擊!');
}
}
var pikachu = new Pokemon('皮卡丘','電');
console.log(pikachu);
console.log(pikachu.attack()); //"攻擊!" undefined
pikachu.attack(); //"攻擊!"
console
[object Object] {
name: "皮卡丘",
skill: "電"
}
"攻擊!"
undefined
"攻擊!"
prototype-base
javascript
function Pokemon(name, skill) {
this.name = name;
this.skill = skill;
}
Pokemon.prototype.attack = function() {
var sound = this.name.slice(0,2).repeat(2);
console.log("攻擊吧!" + this.name + "!使出" + this.skill + "~" + sound);
}
var pikachu = new Pokemon("皮卡丘", "十萬伏特");
pikachu.attack();
console
"攻擊吧!皮卡丘!使出十萬伏特~皮卡皮卡"
可用轉譯套件轉成較低版本的javascript
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing