Es6基础语法

ES6 函数

1、this :this代表当前正在执行的对象

function fn () {
  console.log(this)
}
fn() // window 
const obj = new fn();  // { }
fn.call({ name:"1" })  // { name:'1' }

2、箭头函数
(1)箭头函数的this是在定义的时候就固定不变了
(2)箭头函数 没有自己的this
(3)箭头函数 不能当类(构造器)使用 不可以 new
(4)箭头函数 没有 arguments

  const fn = () => {
    console.log(this);
    console.log(arguments);
  }
  fn()   // undefined    严格模式下    在非严格模式下是 window 
  const obj = new fn();  // undefined

new 一个实例 执行 4 步
(1)创建一个空对象
(2) 执行构造器 Person 把this指向这个 {}
(3) 添加属性
(4) 返回当前实例
fn.call({ name:"1" }) // undefined

3、怎么改变this的指向

call ()

  function person (params) {
     this.name = params
     console.log(this.name);    //  27
   }
   person.call({},27)

bind ()

  function person (params) {
    this.name = params
     console.log(this,this.name);    //  27
   }
   const fn2 = person.bind({age:22},'小花')
   fn2()

ES6 数组 方法

map filter some forEach every find findIndex reduce
1、 map 返回一个新数组 长度不变

  const arr = [1, 3, 5, 7, 9]

  const newArr = arr.map(v => v+1)  // [2, 4, 6, 8, 10]

  const newArr = arr.map(v => v>3)   //[false, false, true, true, true]

  const newArr = arr.map(v => v>3 && v)   //[false, false, 5, 7, 9]

2、filter 返回一个新数组 长度改变 过滤

  const arr = [1, 3, 5, 7, 9]

  const newArr = arr.filter(v => v>3)    //  [5, 7, 9]

3、 some 只要返回true 就会停止循环

  const arr = [1, 3, 5, 7, 9]

  const newArr = arr.some(v => v===7)    //  返回true  循环了3次

4、 every 只要返回false 就会停止循环

  const arr = [1, 3, 5, 7, 9]

  const newArr = arr.every(v => v===7  )    // 只执行了1次   返回false

5、 foeEach 普通循环 没有返回值

  const arr = [1, 3, 5, 7, 9]

  arr.forEach(v => {

    console.log(v);  //  1, 3, 5, 7, 9

  }) 

6、 find 为true的时候就会停止循环 返回 当前的值

  const data = [{name:'1',id:1}, {name:'2',id:2}, {name:'3',id:3}]

  const newObj = data.find(v => v.id===2)

  console.log(newObj);        //  {name:'2',id:2}

7、 findIndex 为true的时候就会停止循环 返回 当前的值的下标

  const data = [{name:'1',id:1}, {name:'2',id:2}, {name:'3',id:3}]

  const newObj = data.find(v => v.id===2)

  console.log(newObj);        //  返回 1

8、 reduce 两个参数 (函数[必须有return],默认值)
(1)无默认值


  const arr = [1, 3, 5, 7, 9]

  const sum=arr.reduce((a,b)=>{

    return a+b

    // a ->1  b->3         第1次

    // a ->4  b->5         第2次

    // a ->9  b->7  ....   第..次

  })

  console.log(sum);      // 25

(2)有默认值


const arr = [1, 3, 1, 7, 5, 7, 9]

    // a ->{}  b->1              第1次

    // a ->{1:[1]}  b->3         第2次

    // a ->{1:[1],3:[3]}  b->1   第3次

    // a ->{1:[1,1],3:[3]}  b->7   第4次  ....

  const newObj = arr.reduce((a,b)=>{

           if (a[b]) {   a[b].push(b)   } else {   a[b] = [b]   }

           return a

  }, {})

  console.log(newObj);  //{1:[1, 1],3:[3],5:[5],7:[7, 7],9:[9]}

(3)在antd 3.26 表单回填应用


  mapPropsToFields({ obj }) {

     return Object.keys(obj).reduce((pre, d) => {

        return {

         ...pre,

         [d]: Form.createFormField({ value: obj[d] })

        }

      }, {})

   },

9、数组的扩展运算符 ...

  const arr = [1, 2, 3]

  const brr = [4, 5, 6]

  console.log([...arr,...brr]);  // [1,2,3,4,5,6]

10、 fill 填充数组

  const str=new Array(50).fill('-').join('')

  console.log(str);  //  ---------------------

11、includes 是否包含

  const arr = [1, 2, 3]

  console.log(arr.includes(2))   // true

12、flat 数组扁平化

  const arr = [1, [2, [3,4] ] ]

  //  默认二维数组扁平化

  console.log(arr.flat() )   // [1,2,[3,4] ]

  //  Infinity 多维数组扁平化

  console.log(arr.flat(Infinity) )  // [1,2,3,4]   

13、Set 数组去重

   let crr= [1,2,1,3,4,5,1,2]

   console.log([...new Set(crr)]);    //  [1,2,3,4,5]

ES6 对象 方法

1、Object.assign(新对象,对象1,对象2,..) 合并对象
注: 是个浅拷贝

   const obj1 = { name:"小花" }

   const obj2 = { age:20 }

   Object.assign(obj1,obj2) // 浅拷贝   { name:"小花", age:20 }

   //{...obj1,...obj2}        // 浅拷贝   { name:"小花", age:20 }

2、keys 取到所有的key值 values 取到所有的value值

   const obj = { name:"小花", age:20, sex:"男" }

   console.log(Object.keys(obj));  // ["name", "age", "sex"]

   console.log(Object.values(obj)); //  ["小花", 20, "男"]

3、Object.entries( )

  const obj = { name:"小花", age:20, sex:"男" }

  Object.entries(obj)   // [ ["name", "小花"],["age", 20],["sex", "男"] ]

取出对象里的所有key 和 value

(1)、reduce

       Object.entries(obj).reduce((v,[key,value])=>{
              console.log(key,value)           // name 小花  age 20  sex 男
        },'')

(2)、for of

        for(let [key,value] of Object.entries(obj)) {
             console.log(key,value)           // name 小花  age 20  sex 男
        }

ES6 Promise

1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。

2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。

image

(1)、特点:处理异步 异步的代码以同步的方式

(2)、用法 :
new Promise((resolve,reject)=>{ resolve() 成功 reject() 失败 })
(3)、状态:进行中 已成功 已失败 (一旦固定就不会再改变)

1、 Promise.all() -- 用于将多个 Promise 实例,包装成一个新的 Promise 实例 两个promise一起触发

const url = "http://api.baxiaobu.com/index.php/home/v1/register"

const param = qs.stringify({

  username:"1111",

  pwd:"222"

})

const fn0 = () => axios.post(url,param)

const fn1 = () => axios.post(url,param)

const p0 = Promise.all([fn0(),fn1()])

p0.then(res=>console.log(res))

.catch()

2、 async 和函数一起用 函数里需要异步方法前面加上 await
await 不止异步 任何值 两个promise逐步触发

const URL="https://blogs.zdldove.top/Home/Apis/listWithPage"
async function fn () {
    const res0 = await axios.post(URL)
    console.log(1);
    const res1 = await axios.post(URL)
    console.log(res0,res1);
}
fn()

3、async 原理
async === generator + 自动执行器

function spawn (genF) {
  return new Promise((resolve, reject) => {
    const gen = genF()
    function step (nextF) {
      let next = nextF()
      if(next.done) {
         return resolve(next.value)}    
         Promise.resolve(next.value)
          .then(v => {
             step(() => gen.next(v))
          })
      }
    step(() => gen.next(undefined))
  })
}

ES6 解构赋值

1、数组的解构赋值

ES5:
var a = 1;
var b = 2;
ES6:
var [a,b] = [1,2]
以上模式匹配写法

数组嵌套解构

let [a,[[b],c]] = [1,[[2],3]];
a//1
b//2
c//3
let [arr,..brr] = [1,2,3,4];
arr//1
brr//[2,3,4]

如果解构不成功,变量的值就是undefined

let [a] = [];
let [b,a] = [1];
// a就是undefined

Set解构,也可以使用数组的解构赋值

let [x,y,z] = new Set(["a","b","c"]);
x //a

2、对象解构赋值

对象的解构与数组的解构有一个重要的不同;数组的元素是按次序排列的,变量的取之由他的位置决定;而对象的属性是没有次序的,变量必须与属性同名,才能取到正确的值

let {bar,foo} = {foo:"aaa",bar:"bbb"};
bar // bbb
foo //aaa
let {baz,foo} = {foo:"aaa",bar:"bbb"};
baz //属性不同名是 undefined

3、数值和布尔值的解构赋值

解构赋值时,若果右边是数值或者布尔值,则会先转成对象

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