let & const

建议,多用const,变量用let,不用var
  // let 没有变量提升  // console.log(a)  // let a = 1;  // b 声明常量,基本类型不可修改  // const b = 1;  // b = 2;  // 可以修改复杂类型  const c = [1]  c[0] = 10;  console.log(c) // ?

deconstruct 解构赋值

  const list = [11,22,33];  let [a,b] = list;  let [a1, ...b1] = list;  console.log(a, b )  console.log(a1, b1)  const obj = {    name: "david",    age: 21,    sex: 'male'  }  //const {name, age} = obj;  //   console.log(name, age)  // 剩余参数  // const {  //   name, ...attrs  // } = obj;  // console.log(name)  // console.log(attrs)  // 默认值  const{name = 'admin'} = obj;  console.log(name)  // 扩展  // 怎么求一个数组最大值  const list1 = [11,2,444,5]  // 原生  console.log(Math.max.apply(window,list1))  // es6  console.log(    Math.max(...list1)  )  // 扩展 react中的展开符  // 1. 给组件增加参数  // const attrs = {  //   name: '111',  //   age: 555  // }  // <Component ...attrs />

module 模块

// 整个模块导出// eg state.jsexport default {}class State {  list: []}export default new State()// 引入方法import $$State from "./state"import {list}  from "./state"// 一个一个导出// eg. math.jsexport function add() {}export function minus() {}import {add, minus} from "./math"

String

  let string = "apple,banana,orange";  string.includes("banana");     // true  string.startsWith("apple");    // true  string.endsWith("apple");      // false  const str = 'david'  const str1 = `${str} is a boy!`  console.log(str1)

Object

const name = 'david' ,age = 11;// 变量创建对象const person = {name, age}// 对象里的方法const obj = {  say(){    console.log("hello")  }}// ES6允许用表达式作为属性名,但是一定要将表达式放在方括号内const fnName = 'list1'const obj2 ={  [`${fnName}_get`](){    console.log("hello world")  }}obj2.list1_get()// 合并对象const obj1 = {  a: 1}const obj11 = {  ab: 1}const obj111 = {...obj1, ...obj11}console.log(obj111)const obj = {    name: 'david',    age: 11}console.log(    Object.keys(obj))console.log(    Object.values(obj))console.log(Object.entries(obj))    // 重要 Object.assignconst aa = Object.assign({}, obj1)aa.a = 111;console.log(aa)console.log(obj1)

Array

  // Array.from() 类数组变成数组   const obj = {}  obj[0] = 0;  obj[1] = 1;  obj.length = 2;  console.log(obj)  const arr = Array.from(obj)  console.log(arr)  // 合并数组  const arr1 = [111]  const arr2 = [333]  const arr3 = [...arr1, arr2]  // 包含元素   console.log(    arr3.includes(111)  )

function

  • 箭头函数this,指向上层
  • 箭头函数没有arguments
const did = () => {    console.log("dis something")  }  did()  const doing = name => {    console.log("I am doing " + name)  }  doing("cooking")  const introduce = (name, age = 18) => {    console.log(      `I am ${name} and I am ${age}`    )  }  introduce("Tom")  const talks = (market, ...others) => {    console.log(market)    console.log(others)  }  talks("家乐福", '河马生鲜', 'KFC')  // 箭头函数this指向问题   name = "window"  const obj = {    name:'obj',    say: () => {      console.log(this)      console.log(this.name)      console.log("\n")    },    tell(){      console.log(this)      console.log(this.name)      console.log("\n")    }  }  obj.tell()  obj.say()

class

  class Animal{   constructor(){     this.name = "animal"   }      // 静态方法   static tell(){     console.log("Animal tell")   }    // 实例方法    gogo(){     console.log("gogogo")   }  }  class Dog extends Animal {    constructor(){      super()      this.name = "Dog"    }  }  const hsq1 = new Animal()  const hsq2 = new Dog()  console.log(hsq1.name)  console.log(hsq2.name)  hsq1.gogo()  Animal.tell()  Dog.tell()

proxy

可用来实现数据双向绑定
  let target = {    name: 'Tom',    age: 24  }  let handler = {    get: function(target, key) {      console.log('getting '+key);      return target[key]; // 不是target.key    },    set: function(target, key, value) {      console.log('setting '+key);      target[key] = value;    }  }  let proxy = new Proxy(target, handler)  console.log(proxy.name)
// 实现数据双向绑定的两种实现 <input type="text" id="a"><script>  const model = {  }  // view - model  $("#a").on("keyup" ,function () {    model.name = $(this).val()    console.log(model)  })  // let value = ''  // // model - view  // Object.defineProperty(model, 'name', {  //   set: function (v) {  //     value = v;  //   },  //   get: function () {  //     return value  //   }  // })    let handler = {    get: function(target, key) {      console.log('getting '+key);      return target[key]; // 不是target.key    },    set: function(target, key, value) {      target[key] = value;      $("#a").val(value)    }  }  let proxy = new Proxy(model, handler)  setTimeout(function () {      proxy.name = 'hhhhhhhh'  }, 3000)  </script>