Fe-14 ES-6

Fe14-1

JS 的歷史現狀和未來

JS 已經 20 年了
現狀是各家在瞎搞
typescript
xxscript
jsx

  • 重要的還是編程能力
    簡化問題的能力
    快速開發(fā)的能力
    解決別人不能解決的問題的能力

'gua' == name

strcmp("gua", name) == 0

var stringEqual = function(a, b) {
return strcmp(a, b) == 0
}

stringEqual('gua', name)

什么是 ES6 有什么新東西

  • ES6(ECMAScript 6) 是 JavaScript 的第 6 個版本
    為什么要叫 ES6 不叫 JS6 呢
    因為你沒資格給它取名字

let
const
模板字符串
Set 類型(集合)
Map 類型
...
類似 Python 的解包
函數默認參數
可變參數
箭頭函數(這就是個垃圾)
新增函數

var 是以函數為單位限制作用于的修飾符號
var foo = function() {
if(true) {
var foo1 = 1
let foo2 = 2
}
log('foo1', foo1)
log('foo2', foo2)
}

log(foo1)

let
let 就是限制作用域在 {} 內的 var
for(let i = 0; i < 3; i++) {
log(i)
}
log(i)
// 結果是 undefined

for(var i = 0; i < 3; i++) {
log(i)
}
log(i)

if(true) {
let aa = 1
log(aa)
}
log(aa)

if(true) {
var a = 1
log(a)
}
log(a)

const
const 用來聲明一個不可賦值的變量
變量的值只能在聲明的時候賦予
const a = 1
a = 2 // 錯誤

// 下面的不是賦值 是操作 所以是可以的
const arr = [1, 2]
arr.push(3)
// [1, 2, 3]

Set
Set 在其他語言里面稱為集合
是一種和 Array 相似的數據結構
不同之處在于, Set 中的元素都是不重復的
用法如下

var s = new Set()

// add 方法添加元素, 和 push 一樣
s.add(1)
s.add(2)

// has 方法檢查元素是否在 set 中
s.has(1) // true
s.has(3) // false

// size 屬性相當于 length
s.size // 2

// delete 方法刪除一個元素
s.delete(1)
s.has(1)

s.size // 1

set 類型的主要作用是去重, 我們作業(yè)中
做過的 union 等函數都是 set 的標配
函數, 不過在 js 中需要手動實現那些函數

Map
Map 和 Object 很相似
在其他語言中 通常會有 dict 和 object 兩種數據結構
現在 js 也有獨立的 dict 那就是 Map(其實沒多好用)

用法如下
var m = new Map()

// set 方法增加一個值
m.set('name', 'gua')

// get 屬性得到一個值
m.get('name')

// 看起來是比 Object 惡心多了.....

let o = {}
o.name = 'gua'
o.name

...
... 叫擴展符號, 作用是把數組解開成單獨的元素
var a1 = [1, 2, 3]
var a2 = [...a1, 4]
// 結果是 [1, 2, 3, 4]

...可以用來傳參
var a1 = [1, 2, 3]
log(...a1)
// 相當于 log(1, 2, 3)
// 類似于 log.apply(window, a1)

解包
解包是其他語言(Python) 中學過來的特性, 見下方例子
var [a, b] = [1, 2]
// a b 分別被賦值為 1 2
// 相當于下面的老代碼
var arr = [1, 2]
var a = arr[0]
var b = arr[1]
使用這個語法可以一行代碼給多個變量賦值
所以也就可以一行代碼交換變量值
[a, b] = [b, a]

函數默認參數
函數默認參數我們之前已經直接用過了, 不再講

var foo = function(a, name='gua') {
log(a, name)
}

可變參數
用 ... 語法可以實現可變長度的參數
多余的參數會被放進 args 數組中
args 是任意的變量名
var foo = function(a, ...args) {
log(a, args.length)
}
foo(1, 2, 3, 4)

箭頭函數(這就是個垃圾)
箭頭函數就是匿名函數定義的簡化版, 宣稱能使得代碼更簡潔
實際上就是純粹的垃圾
箭頭函數的 this 值是綁定了的
箭頭函數沒有 arguments 對象
如果要多參數, 必須用 ...

語法如下
(參數1, 參數2) => { 語句 }
(參數1, 參數2) => 語句
// 上面兩行相當于下面這函數
function(參數1, 參數2) {
return 語句
}

// 如果只有一個參數,圓括號可省略的
(參數1) => { 語句 }
參數1 => { 語句 }

// 但是如果沒有參數, 必須需要使用圓括號
() => { 語句 }

// 例子
var a1 = [1, 2, 3]
// 下面兩個等價
var a2 = a1.map(function(n){
return n * n
})
var a3 = a1.map( n => n * n )

n => n * n
// 上面 1 行等價于下面 3 行
function(n) {
return n * n
}

var foo = function(a) {
return function(b) {
return a + b
}
}
調用方式如下
var c = foo(1)
c(2)
也可以寫在一行
foo(1)(2)

上面等價于下面
a => b => a + b

新增函數
新增函數例如 includes 我們早就用過了, 所以不用提

CSS 最基礎的套路

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容