ES6的学习2

一、数组

es5里面新增的一些循环:
arr.forEarch(), arr.map(), arr.filter(), arr.some(), arr.every()
他们可以接收两个参数 arr.forEarch/map...(循环回调函数, this指向谁)
arr.reduce((pre,cur,index,arr)=>{})
pre:上次返回的结果 cur:当前的数 index:下标 arr:循环的数组
es6里新增的一些循环
1.for...of...

let arr = ['apple', 'banana', 'orange', 'tomato']
for (let val of arr) {
  console.log(val)   // apple  banana  orange  tomato
}
for (let index of arr.keys()) {
  console.log(index)  // 0 1 2 3
}
for (let [key, val] of arr.entries()) {
  console.log(key, val)   // 0 apple 1 banana 2 orange 3 tomato
}

2.arr.find() 查找,找出第一个符合条件的数组成员,如果没有找到返回undefined
3.arr.findIndex() 找的是位置,没有找到返回-1
4.arr.fill() 填充。arr.fill(填充的东西, 开始位置, 结束位置)
5.arr.includes() 返回true或false

let arr = ['apple', 'banana', 'orange', 'tomato']
let b = arr.includes('banana')
console.log(b)  // true
二、对象简洁语法以及对象新增
//之前的用法
let name = 'Tom'
let age = 18
let json = {
  name: name,
  age: age,
  show: function () {
    return this.name
  }
}
//es6的简洁用法
let name = 'Tom'
let age = 18
let json = {
  name, //这里简写了 等价于name: name
  age,
  show () {  //注意这里不要用箭头函数
    return this.name
  }
}

对象新增
1.Object.is() 用来比较两个值是否相等

Object.is('a',  'a')  // true
Object.is(NaN, NaN)  // true 注意在之前 NaN===NaN是为false的
Object.is(+0, -0)  //false

2.Object.assign() 用来合并对象或复制一个对象
Object.assign(目标对象, source1,source2...)

function fn (options) {
  let defaults = {
    name:'Tom',
    age: 18
  }
  let json = Object.assign({}, defaults, options) 
  console.log(json) // {name: "Tom", age: 18, addr: "aaa"}
}
fn({addr:'aaa'})

es7引入
Object.keys() ,Object.entries(),Object.values()

  let {keys, values, entries} = Object  //解构
  let json = {
    a: 1,
    b: 2,
    c: 3
  }
for (let key of keys(json)) {
  console.log(key)  // a b c
}
for (let key of values(json)) {
  console.log(key)  // 1 2 3
}
for (let [key, val] of entries(json)) {
  console.log(key, val)  // a 1  b 2  c 3
}

对象的扩张运算符‘...’

let {x, y, ...z} = {x: 1, y: 2, a: 3, b: 4}
console.log(x,y)  // 1,2
console.log(z)  //{a:3, b:4}

let json = {a: 3, b: 4}
let json2 = {
  c: 5,
  d: 6,
  ...json
}
console.log(json2)  //{c: 5, d: 6, a: 3, b: 4}
三、Promise

作用:解决异步回调问题
传统方式大部分用回调函数,事件
Promise语法:
new Promise (function(resolve, reject) {
//resolve 成功调用
//rejiect 失败调用
})
用法:new Promise().then(res => {}).catch(err=>{})

let a = 1
let promise = new Promise(function(resolve, reject) {
  if (a = 10) {
    resolve('成功')
  } else {
    reject('失败')
  }
})
promise.then(res => {
  console.log(res)
})

Promise.resolve('aa') 将现有的东西转成一个promise对象,resolve状态 成功状态
等价于:
new Promise (resolve => {
resolve('aa')
})
Promise.reject('aa') 将现有的东西转成一个promise对象,reject状态 失败状态
等价于:
new Promise ((resolve, reject)=> {
reject('aa')
})
批量处理Promise
Promise.all([p1, p2, p3]).then() 把promise打包扔到一个数组里面,打包完还是一个promise对象
必须确保所有的promise对象都是resolve状态,都是成功状态

let p1 = new Promise((resolve, reject) => {
  resolve('aaa')
})
let p2 = new Promise((resolve, reject) => {
  resolve('bbb')
})
let p3 = new Promise((resolve, reject) => {
  resolve('ccc')
})
Promise.all([p1, p2, p3]).then(res => {
  console.log(res) //['aaa', 'bbb', 'ccc']
})
四、模块化

js不支持模块化。es6统一服务端和客户端模块规范
模块化
a).如何定义模块? export
b),如何使用?
import
import ‘./modules/1.js’;
import {a, b, c} from ‘./modules/1.js’; //什么时候加{}导出用的export
import a from ‘./modules/1.js’; //导出用的export default不需要加{}
import * from ‘./modules/1.js’;
import a as apple from ‘./modules/1.js’; //as apple取得的别名
import特点:
a、import可以是相对路径也可以是绝对路径
b、import模块只会导入一次,无论你引入多少次
c、import ‘./modules/1.js’; 如果这么用相当于引入文件
d、有提升效果。import会自动提升到顶部首先执行
e、导出去的模块内容,如果里面有定时器更改,外面也会改动

import() 类似node里面的require,可以动态引入,默认import语法不能写到一个if之类里面。返回值是一个Promise对象
优点:
1.按需加载
2.可以写在if中
3.路径也可以动态

import('./modules/1.js').then(res => {
  console.log(res.a+res.b)
})
五、类(class)和继承

注意:
1.es6里面class没有提升功能,在es5里用函数模拟可以,默认函数提升
2.es6里面this比之前轻松多了

  //之前的写法
function Person() {
  this.name = 'aaa'
}
Person.prototype.showName=function(){}

//es6的写法
class Person{
  constructor(name, age){  //构造方法(函数)调用new自动执行
    this.name=name
    this.age=age
  }
  showName(){
    return `名字为:${name}`
  }
}
let p1 = new Person('Tom', 18)
console.log(p1.showName)

静态方法:就是类本身上的方法(用类名调用)。在方法前加static

class Person{
  constructor(name, age){  
  }
  showName(){
    return `哈哈哈`
  }
  static showAge(){
     return `静态方法`
  }
}
let p1 = new Person('Tom', 18)
console.log(p1.showName)
console.log(Person.showAge) //调用静态方法直接用类名调

继承
es6中的extends

//父类
class Person{
  constructor(name){  
    this.name = name
  }
  showName(){
    return `名字为:${name}`
  }
}
//子类
class Student extends Person{
  constructor(name, skill){  
    super(name)
    this.skill= skill
  }
  showSkill(){
    return `技能为:${skill}`
  }
}
let stu1 = new Student ('Tom', '逃学')
console.log(stu1.name)
console.log(stu1.showSkill())
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 六、数组热闹的循环 新增方法有:arr.forEach() 、arr.map() 、arr.filter()、ar...
    彼得朱阅读 364评论 0 1
  • ES6 的新特性 1:变量声明 let 和 const 在 ES5 之前 以下两种 函数方式 声明 test 方式...
    泰然自若_750f阅读 65评论 0 1
  • 新增模板字符串(为JavaScript提供了简单的字符串插值功能)、 箭头函数(操作符左边为输入的参数,而右边则是...
    WPeach阅读 157评论 0 0
  • 一、简介 ES6 -> ECMA 标准,又叫 ES2015。ES6 -> 2015年6月 ES...
    magic_pill阅读 1,044评论 0 16
  • 本文为阮一峰大神的《ECMAScript 6 入门》的个人版提纯! babel babel负责将JS高级语法转义,...
    Devildi已被占用阅读 1,970评论 0 4