ES6

一、ES6项目构建

二、ES6 基本语法

2.1 let 和 const(块作用域)

  • 使用 let 定义变量,不能重复定义

    let a = 1
    let a = 2 //报错,不能重复定义

  • const :常量,声明的时候同时必须赋值,之后不能修改

2.2 解构赋值

  • 解构赋值:简单理解就是等号的左边和右边相等。
  • 解构赋值的分类
    • 数组解构赋值(★)
      let a,b
      [a,b,…c] = [1,2,3,4]
      // a =1, b = 2, c = [3,4]

    • 字符串解构赋值(★)

    • 对象解构赋值:
      let metaData = {
      title:‘haha’,
      test:[{
      name:‘zs’,
      age:17
      }]
      }
      let {title:esTitle,test:[name:cnName]} = metaData
      console.log(esTitle,cnName) // ‘haha’ ‘zs’

    • 布尔值解构赋值

    • 函数参数解构赋值

    • 数值解构赋值

2.3 正则扩展

正则新增特性

  • 构造函数的变化

flags 此属性可以返回当前正则表达式显示设置的修饰符

let regex = new RegExp('xys','i')
console.log(regex.flags)  // i
  • 正则方法的扩展

  • u 修饰符

  • y 修饰符:y 修饰符的作用与 g 修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g 修饰符只要剩余位置中存在匹配就可,而 y 修饰符确保匹配必须从剩余的第一个位置开始 ,如果找不到,就终止

    var s = ‘anta’;
    var r1 = /a+/g;
    console.log(r1.exec(s))
    console.log(r1.exec(s))

分析:

(1).默认,lastIndex初始值为0。

(2).第一次执行exec方法匹配成功后,lastIndex属性值变为1。

(3).那么再一次执行exec方法的开始匹配位置就是1。

(4).从位置1处开始进行检索,直到位置3处匹配成功。

var s = 'anta';
var r2 = /a+/y;
console.log(r2.exec(s))
console.log(r2.exec(s))

代码分析如下:

(1).默认,lastIndex初始值为0。

(2).第一次执行exec方法匹配成功后,lastIndex属性值变为1。

(3).注意了,y修饰符的作用马上体现出来,正则必须在位置1处匹配成功,然而位置1处的字符是"n",匹配失败,那么整个匹配就终止了

  • s 修饰符
  • 正则表达式 sticky属性:此属性用来检测正则表达式是否使用y修饰符。
    如果使用,则返回true,否则返回false。

正则表达式修饰符 i、g、m、s、U、x、a、D、e

2.4 字符串扩展

  • 遍历接口
  • Unicode 表示法
  • 模板字符串
  • 新增方法
    • includes:用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false
    • startsWith:方法用于检测字符串是否以指定的子字符串开始
    • endsWith:方法用于检测字符串是否以指定的子字符串结尾
    • repeat:用于复制
    • padStart:向前补位,如 ‘1’.padStart(2,‘0’) 输出 01
    • padEnd:向后补位,如 ‘1’.padStart(2,‘0’) 输出 10

2.5 数值扩展

  • Number.isFinite(): 判断数值是否是有尽
    • Number.isFinite(1) true
    • Number.isFinite(NaN) false
  • Number.isNaN()
  • Number.isInteger():判断是否是整数,接收的参数必须是一个数值,不能是字符串
  • Math.trunc():取一个小数的整数部分
  • Math.sign():判断一个数是正数,负数,0。正数返回1,负数返回1.0返回0
  • Math.cbrt():计算一个数的立方根

2.6 数组扩展

  • Array.from():将伪数组变成数组,只要有length 即可

    let str = ‘12345’
    console.log(Array.from(str)) //[“1”, “2”, “3”, “4”, “5”]

    let obj ={
    0:‘a’,
    1:‘b’,
    length:2
    }
    console.log(Array.from(obj)) //[“a”, “b”]

  • Array.of():将一组值转换为数组,类似于声明数组

    let str = ‘11’
    console.log(Array.of(str)) //[‘11’]
    =>
    console.log(new Array(‘11’)) //[‘11’]

  • Array.fill():使用给定的值,将数组原来的值替换,ps: 填充完之后会改变原来的数组。有三个参数

    • target :待填充的元素。必填

    • start:开始填充位置的索引。可选,如果没有,就是将元素全部替换

    • end:终止填充位置的索引。可选。如果只有前两个参数,默认从开始索引到结束全部填充

      {
      let arr = [1,2,3,4,5]
      let arr1 = arr.fill(5)
      console.log(arr1) // [5, 5, 5, 5, 5]
      console.log(arr) // [5, 5, 5, 5, 5] 填充完会改变原来数组的值
      }
      {
      let arr = [1,2,3,4,5]
      let arr2 = arr.fill(5,2) // [1, 2, 5, 5, 5]
      console.log(arr) // [1, 2, 5, 5, 5] 填充完会改变原来数组的值

      let arr3 = arr.fill(5,1,3)   // [1, 5, 5, 5, 5]
      console.log(arr)   // [1, 5, 5, 5, 5]  填充完会改变原来数组的值
      

      }

  • Array.keys():遍历数组的键名

    let arr = [1,2,3,4]
    let arr1 = arr.keys()
    for (let key of arr1) {
    console.log(key); // 0,1,2,3
    }

  • Array.values():遍历数组的值

    let arr = [1,2,3,4]
    let arr1 = arr.values()
    for (let val of arr1) {
    console.log(val); // 1,2,3,4
    }

  • Array.entries():遍历数组的键和值

    let arr = [1,2,3,4]
    let arr1 = arr.entries()
    for (let e of arr1) {
    console.log(e); // [0,1] [1,2] [2,3] [3,4]
    }

  • Array.copyWithin():用的很少,不理解

  • Array.find():找到数组中第一个符合条件的,并返回该值

    let arr = [1,2,3,4]
    let arr1 = arr.find( value => value>2 )
    console.log(arr1); // 3

  • Array.findIndex():找到数组中第一个符合条件的值并返回该索引

    let arr = [1,2,3,4]
    let arr1 = arr.findIndex( value => value>2 )
    console.log(arr1); // 2

  • Array.includes():遍历数组,寻找是否包含给定的某个值,包含返回 true,不包含,返回 false

    let arr = [1,2,3,4,5]
    let arr1 = arr.includes(2)
    let arr2 = arr.includes(8)
    console.log(arr1) // ture
    console.log(arr2) // false

数组的所有方法

2.7 对象扩展

  • Object.assign():用来将源对象(source)的所有可枚举属性,复制到目标对象(target)。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象

    let targetObj1 = { a: 1 };
    let sourceObj1 = { b: 1 };
    let sourceObj11 = { c: 3 };
    Object.assign(targetObj1, sourceObj1, sourceObj11);
    console.log(targetObj1) //{a:1,b:1,c:3}

  • Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

    • 为对象添加属性
    • 为对象添加方法
    • 克隆对象

2.8 Symbol

  • Symbol 的概念:用 Symbol 声明的变量永不相等,保证唯一性。
  • Symbol 的使用场景:
    • 使用Symbol来作为对象属性名(key)
      const name = Symbol()
      const age = Symbol()

      let obj = {
      [name]:‘王二麻子’,
      [age]:13,
      color:‘yellow’
      }

      console.log(obj[name]) // 王二麻子

    • 当使用了Symbol作为对象的属性key后,在对该对象进行key的枚举时 ,使用普通的 object.keys(obj) 只能都得到 非 Symbol 的值。使用JSON.stringify()将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容之外
      Object.getOwnPropertySymbols(obj) // [Symbol(name)]

       Object.getOwnPropertySymbols(obj).forEach(item =>{
          console.log(obj[item]);  // 王二麻子  13
      })
      
      // 使用新增的反射API
      Reflect.ownKeys(obj) 
      
      Reflect.ownKeys(obj).forEach(item =>{
         console.log(item,obj[item])
      })
      //  color yellow
      //  Symbol() "王二麻子"
      //  Symbol() 13
      

2.9 set-map 数据结构

  • set()
    • 基本用法:它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。
      let arr = new Set()
      arr.add(1)
      arr.add(2)

      console.log(arr);  //Set(2) {1, 2}
      console.log(arr.size); //2
      
    • Set 函数可以接受一个数组作为参数,来初始化一个 Set 结构
      let set = new Set([1,2,3,4,5])
      console.log(set); //Set(5) {1, 2, 3, 4, 5}

    • Set 用于数组去重(扩展运算符和 Set结构结合,实现去重)
      console.log([… new Set([1,2,3,4,5,6,5,4,3,3,2,1])]); //[1,2,3,4,5,6]

    • 向Set加入值的时候,不会发生类型转换,所以5和“5”是两个不同的值

    • 在Set中两个对象总是不相等的,原因是对象是引用值,存储地址不同.
      let set = new Set();
      set.add({});
      console.log(set.size); //1
      set.add({});
      console.log(set.size); //2

    • Set实例的属性和方法

      • 操作方法:
        • add(value):添加某个值,返回 Set 结构本身
        • delete(value):删除某个值,返回一个布尔值,表示删除成功与否
        • has(value):查询某个值,返回一个布尔值
        • clear():清除所有成员,没有返回值
      • 遍历方法:
        • keys():返回键名的遍历器
        • values():返回键值的遍历器
        • entries():返回键值对的遍历器
        • forEach():使用回调函数遍历每个成员
        • keys方法,values方法,entries方法返回的都是遍历器对象。由于Set结构没有键名,所以keys方法可values方法的行为完全一致。
    • 使用Set可以很容易的实现并集、交集、差集。
      let a = new Set([1,2,3,4])
      let b = new Set([2,3,4,5,6])

      const union = new Set([...a,...b])
      console.log(union);  // {1,2,3,4,5,6}
      
      //交集
      const intersect = new Set([...a].filter(x => b.has(x)));
      console.log(intersect);  //{2,3,4}
      
      // 差集
      const difference = new Set([...a].filter(x => !b.has(x)));
      console.log(difference);   //{1} 
      
  • weakSet():WeakSet结构与Set类似,也是不重复的集合。但是,它与Set有两个区别 :
    • 只支持对象,不能是数值,boolaen或者是 string;
    • 是弱引用,只引用地址,不会去检测地址是否已经被垃圾回收。
      • 没有 size 属性,不能遍历成员
      • WeakSet的一个用处,是储存Dom节点,而不用担心这些节点从文档移除时,会引发内存泄漏。

JavaScriptES6的Set与WeakSet

  • Map():
  • weanMap():

JavaScriptES6Map与WeakMap

2.10 Proxy 和 Reflect

  • 概念:
    • Proxy
    • Reflect

2.11 类

静态方法只能被构造函数所调用,不能被构造函数的实例调用。

class Parent{
    constructor(name){
        this.name = name
    }

    static test(){
        console.log('test');
    }
}

Parent.test()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值