ES6語法
ES6 -> ECMA 標準
js
ES7 ES8…..
ES5.x
ECMA-262 -> ES1.0
ES2015
ES6 -> 2015年6月 ES6.0
每年6月份,發佈一個版本
2016年6月 ES6.1 ES7 ES2016
2017年6月 ES6.2(async await) ES8 ES2017
ESnext
ESnext ‘下一代 js’語言
任何人都可以向 標準委員會 (TC39), 要求更改語言標準
提案變成標準,經歷5個階段
Stage 0 展示階段
Stage 1 徵求意見階段
Stage 2 草案階段
Stage 3 候選階段
Stage 4 定案階段(標準)
babel
https://github.com/tc39/ecma262
react, vue, angularJs, angular
chrome, 對新的語法支持,速度還挺猛
ES6環境:
webpack3.x
Traceur
關於定義(聲明)變量:
之前: var a=12;
let a=12
作用域:
全局
函數作用域
let 相當於之前的 var
const 常量, 定義好了不能改變
let注意:
1. 沒有預解析,不存在變量提升
在代碼塊內,只要let定義變量,在之前使用,都是報錯
先定義完,在使用
2. 同一個作用域裏, 不能重複定義變量
3. for循環,for循環裏面是父級作用域,裏面又一個
塊級作用域:
{
//塊級作用域
}
{{{{let a = 12}}}}
if(){xx}
for(){}
while(){}
const: 特性和let一樣
const定義變量不能修改
const定義完變量,必須有值,不能後賦值,不能修改
Object.freeze(對象)
const config={
host:
username:
password:
version:
}
{
//TODO
}
IIFE
(function(){
//TODO
})()
建議:
以後 就用 let 不要在使用var
const http = require(‘http’);
解構賦值:
* 非常有用,特別在做數據交互 ajax
let [a,b,c] =[12,5, 6];
注意: 左右兩邊,結構格式要保持一致
json:
let {name,age, job} = {
name:'Strive',
age:18,
job:'碼畜'
};
let {name:n,age:g, job:a} = json;
解構時候可以給默認值:
let [a,b, c="默認值"] = ['aaa','bbb'];
let a = 12;
let b = 5;
import {a,b,c} from ‘./mod’
字符串模板:
` 字符串模板:
${變量名字}`
優點: 可以隨意換行
字符串連接,要死人的。
let name ='Strive';
let age = 18;
let str = `這個人叫${name}, 年齡是 ${age}歲`;
關於字符串一些東西:
字符串查找:
str.indexOf(要找的東西) 返回索引(位置) ,沒找到返回-1
str.includes(要找的東西) 返回值 true/false
判斷瀏覽器: includes
http://www.xxx.xx
字符串是否以誰開頭:
str.startsWith(檢測東西)
檢測地址
字符串是否以誰結尾:
str.endsWith(檢測東西)
.png
重複字符串:
str.repeat(次數);
填充字符串:
str.padStart(整個字符串長度, 填充東西) 往前填充
str.padEnd(整個字符串長度, 填充東西) 往後填充
str.padStart(str.length+padStr.length, padStr)
函數變化:
1. 函數默認參數
function show({x=0,y=0}={}){
console.log(x,y);
}
show()
2. 函數參數默認已經定義了,不能再使用let,const聲明
function show(a=18){
let a = 101; //錯誤
console.log(a);
}
show()
擴展運算符、Rest運算符:
…
展開數組
... :
[1,2,3,4] -> ... [1,2,3,4] -> 1,2,3,4,5
...:
1,2,3,4,5 -> ...1,2,3,4,5 -> [1,2,3,4,5]
剩餘參數: 必須放到最後
箭頭函數:
=>
let show = () => 1;
() => return東西
() =>{
語句
return
}
注意:
1. this問題, 定義函數所在的對象,不在是運行時所在的對象
2. 箭頭函數裏面沒有arguments, 用 ‘...’
3. 箭頭函數不能當構造函數