ES6学习

ES6

块级作用域、字符串、函数

  1. let和const
  • 定义变量是用块级作用域let替代var
  • const定义不可修改的变量
  • 作用域和{}
  1. 字符串扩展
name = 'viivLgr'
course = 'React开发App'
console.log('hello' + name + ', course is '+ course)

console.log(`hello${name},course is ${course}`) // 模板字符串
console.log(`

    sdasd
`) // 可以有换行符和空格
  1. 函数的用法
  • 参数默认值
const hello = (name = 'viivLgr') => {
    console.log(`hello ${name} !`)
} 
hello()  // 没传值的情况下用默认值 hello viivLgr !
hello('seek') // 传值的情况下替换默认值  hello seek !
  • 箭头函数
function hello(name){
    console.log(`hello ${name} !`)
}
const hello1 = (name) => {
    console.log(`hello ${name} !`)
}
hello('viivLgr') // hello viivLgr !
hello1('viivLgr') // hello viivLgr !

setTimeout(()=>{
    console.log('xxx')
}, 1000)  // 1000毫秒 = 1秒后 输出 xxx

好处:简写代码、保持this作用域

const double = x => x*2 // 只有一行返回值的时候可以简写
console.log(double(5)) // 10
  • 展开运算符
function hello(name1, name2){
    console.log(name1, name2)
}
arr = ['viivLgr', 'seek']
hello.apply(null, arr) // 原来的方式 viivLgr seek
hello(...arr) // 展开运算符 viivLgr seek

对象扩展、解构

  1. Object.keys、values、entries
const obj = {name: 'viivLgr', course: 'React开发App'}
console.log(Object.keys(obj)) // [ 'name', 'course' ]
console.log(Object.values(obj)) // [ 'viivLgr', 'React开发App' ]
console.log(Object.entries(obj)) // [ [ 'name', 'viivLgr' ], [ 'course', 'React开发App' ] ] 把压成数组
  1. 对象方法的简写、计算属性
const name = 'viiv'
const obj = {}
obj[name] = 'hello viiv'
console.log(obj) // { viiv: 'hello viiv' }

const obj1 = {
    name,
    [name]: 'hello',
    hello: function(){},
    hello1(){}
}
console.log(obj1) // { name: 'viiv', viiv: 'hello', hello: [Function: hello], hello1: [Function: hello1] }
  1. 展开运算符扩展对象属性(不是ES6标准、但是babel也支持)
const obj = {name: 'viiv', course: 'React'}
const obj1 = {type: 'IT',name: 'seek'}
console.log({...obj, ...obj1, date: 2018}) // { name: 'seek', course: 'React', type: 'IT', date: 2018 }
  1. 解构赋值
const arr = ['hello', 'viiv']
let arg1 = arr[0]
let arg2 = arr[1]
console.log(arg1, arg2) // hello viiv
let [arg3, arg4] = arr
console.log(arg3, arg4) // hello viiv

const obj = {name: 'viiv', course: 'React'}
const {name, course} = obj
console.log(name, '|', course) // viiv | React

类、模块化

  1. 提供class的语法糖
  • 是prototype的语法糖
  • Extends继承
  • Constructor构造函数
class MyApp {
    constructor(){
        this.name = 'viiv'
    }
    sayHello(){
        console.log(`hello ${this.name} !`)
    }
}
const app = new MyApp()
app.sayHello() // hello viiv !
  1. ES6中新出现的数据结构
  • Set:集合,元素不可重合
  • Map:对象的扩展,key可以是任意的值
  • Symbol:生成一个不重复的变量
  1. 模块化
    ES6中自带了模块化机制,告别seajs和require.js
  • Import, import {}
  • Export, Export default
  • Node现在还不支持,还需要require来加载文件

浏览器现在还不支持import写法,需要安装babel来转成ES5

npm install --save-dev babel-cli babel-preset-env

在webstrom里通过配置 Preferences --> Tools --> File Watchers --> Babel:添加项目安装babel路径即可自动转成ES5语法并存在dist目录文件下

// module1.js
export const name = 'viiv'

// import.js  ES6语法
import {name} from './module1'
console.log(name) // viiv

// import.js ES5语法
'use strict';
var _module = require('./module1');
console.log(_module.name);

其他

  1. 对象扩展符、函数绑定
    需要安装Babel-plugin-transform-object-rest-spread插件、支持扩展符号
  2. 装饰器
  3. Async await
  4. Promise
  5. 迭代器和生成器
  6. 代理proxy

常见代码片段

// 遍历数组
[1, 2, 3].forEach(function(value, index){
    console.log(value)
}) // 1 2 3

// 映射新数组
[1, 2, 4].map(v=>v*2)   // [ 2, 4, 8 ]

// 所有元素是否通过测试
[1, 2, 3, 4].every(v => v > 3)  // false

// 是否有元素通过测试
[1, 2, 3, 4].some(v => v > 3) // true

// 过滤数组
[1, 2, 3, 4, 5].filter(v=>v>3) // [ 4, 5 ]

// 查找符合条件的元素
arr = [{name: 'viiv', age: 18}, {name: 'seek', age: 20}]
console.log(arr.filter(v=>v.age>18))  // [ { name: 'seek', age: 20 } ]

// 查找索引
[1, 2, 3].indexOf(2) // 1

// 连接数组
arr1 = [1, 2, 3]
arr2 = [4, 5, 6]
[...arr1, ...arr2] // [ 1, 2, 3, 4, 5, 6 ]

// 数组去重
arr3 = [1, 2, 3, 4, 3, 2, 1]
[...new Set(arr3)] // [ 1, 2, 3, 4 ]

// 获取对象的key
Object.keys({name: 'viiv', age: 18}) // [ 'name', 'age' ]

// 获取对象里数据的数量
Object.keys({name: 'viiv', age: 18}).length // 2

// 获取对象的value
Object.values({name: 'viiv',age: 10}) // ["viiv", 10]

// 将对象遍历成数组
Object.entries({name: 'viiv',age: 10}) // [Array(2), Array(2)]

// extend功能
obj = {name: 'viiv', age: 18}
newobj = {...obj, job: 'IT', age: 20} // {name: "viiv", age: 20, job: "IT"}

// 获取列表的投和尾


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • 什么是ES6? ECMAScript 6.0 是继ECMAScript 5.1 之后 JavaScript 语...
    多多酱_DuoDuo_阅读 1,092评论 0 4
  • 强大的for-of循环 ES6不会破坏你已经写好的JS代码。目前看来,成千上万的Web网站依赖for-in循环,其...
    Awe阅读 7,512评论 2 7
  • 《ECMAScript6 入门》阮一峰 读书笔记 let和constlet声明的变量仅在块级作用域内有效,var声...
    亲爱的孟良阅读 716评论 1 2
  • 前言 七月中旬,集中时间学习使用React框架的时候,接触到了很多ES6的语法。一开始看的时候,简直一脸蒙蔽,后面...
    huangyh_max阅读 905评论 0 1
  • ECMAScript 6.0( 以下简称ES6) 是JavaScript语言的下一代标准。 ECMAScript和...
    EarthChen阅读 438评论 0 0