ES6笔记

let与const

ES6为了解决缺少块级作用域的问题,新增了let与const

暂时性死区

使用let与const声明的变量与其所在的块级作用域相绑定

var o=1;
{
      console.log(o)      //ReferenceError: Cannot access 'o' before initialization
      let o=2;
}

解构赋值

  • 数组解构赋值
var arr = ["I", "am", ".7\\0"]
//变量多了则多出的为undefined,数组元素多了则“截断”数组
var [a, b, c] = arr;      //一定需要[]
console.log(a, b, c)      //I am .7\0
  • 对象解构
var obj = {
    name: ".7\\0",
    age: "20",
    sex: "Man"
}
//变量多了则多出的为undefined,数组元素多了则“截断”对象
var {name,age,sex} = obj      //必须有{}
console.log(name, age, sex)      //.7\0 20 Man

箭头函数 ()=>

ES6引入箭头函数,箭头函数没有arguments(弃用),也没有this
在箭头函数中使用的this是上下文中词法作用域中的this

var obj = {
    myName: ".7\\0",
    age: "20",
    sex: "Man",
    sayHello: () => {
        console.log(this.myName)
    }
}
obj.sayHello() //undefined

在写上面代码的时候最开始myName写的是name,结果很玄学的打印空串,最后发现window中居然有name这个属性

剩余参数

没什么好说的,直接show code

  • 在函数中使用
(function arguments(...args)
{
      console.log(args)
})(1,2,3,4,5,6)      //(6) [1, 2, 3, 4, 5, 6]
  • 与解构配合使用
var arr = ["I", "am", ".7\\0"]
var [a, ...b] = arr; //一定需要[]
console.log(a, b) //I (2) ["am", ".7\0"]

扩展运算符

扩展运算符将数组或对象转换为用逗号分割的参数序列

let arr=[1,2,3]
console.log(...arr)      //...arr就相当于把数组变成了1,2,3
//=============================================
let obj = {
    myName: ".7\\0",
    age: "20",
    sex: "Man",
    sayHello: () => {
        console.log(this.myName)
    }
}
console.log({
    ...obj      //一定要有{},否则报错,这样相当于复制了一个字面量对象 obj
})
const obj2= {obj,sex:"Woman",color:"red"}       //复制 obj 对象并追加/修改属性
  • 奇技淫巧
    -- 合并数组:
    [...arr1,...arr2]
    -- 转换类数组为数组:
      let dom=document.getElementsById('top')
      [...dom]
      //Array.from()也可以做到
      Array.from(dom)

几个数组方法

  • find():查找第一个满足条件的元素,找到了返回该元素,没有则返回undefined
arr.find(item=>{
      return item===xxx
})
  • findIndex():同上,但返回值为该元素下标
  • includes():查找数组中是否包含该元素,返回true/false

模板字符串

使用` `括起来的字符串是模板字符串,可以使用${}动态绑定值

      let s=`hello ${str}`,str=".7\\0"
      console.log(s)      //hello .7\\0

但是要注意的是,变量的声明一定要在模板字符串的前面

几个字符串方法

  • startsWith
  • EndWith

set

set 是一种数据结构,应该和c++STL中的一样,采用红黑树

  • 几个方法
    -add(value)
    -delete(value)
    -has(value)
    -clear()
    -forEach(value=>{do something...})
  • 数组去重:
      console.log(new Set(["a","b","a","b"]))      //a,b
posted @ 2020-05-06 19:49  .7\0  阅读(156)  评论(0)    收藏  举报