记录高级js学习(十三)ES6的延伸

69 阅读2分钟
模板字符串:

用` `来表示模板字符串,${ }可以接收变量,可以操作变量,也可以接收函数的返回值

      const name = "李斯"
      const age = 18
      const address = "深圳市"
      // 模板字符串实现拼接
      const message = `我叫${name},年龄${age},住在${address}`
      console.log('message: ', message);
      // 模板字符串内也可进行数据操作
      const doubleAge = `两倍年龄是${age*2}`
      console.log('doubleAge: ', doubleAge);
      // 也可以接收函数的返回值
      function getDoubleAge(age){
        return age*2
      }
      const fDoubleAge = `${getDoubleAge(age)}这是双倍的两年`
      console.log('fDoubleAge: ', fDoubleAge);

在JQuery中,常用append添加很长的字符串,内部还有变量,常规来说字符串换行需要前后都加双引号并用加号连接才能换行,用模板字符串就会方便很多。

模板字符串还有个冷门调用函数的用法,第一个参数为以${}为分割点组成的数组,后面参数为${}的内容,了解即可

image.png

函数的剩余参数

image.png

箭头函数

箭头函数没有显式原型,不能作为构造函数,不能用call什么的绑定this,会拿取上级作用域的this

展开运算符
      const arr = [111,222,333]
      const str = "why"
      // 函数传参的时候使用
      function foo(x,y,z){
        console.log(x,y,z);
      }
      foo(...arr) //111 222 333
      foo(...str) //w h y
      // 构造数组时
      const newArr = [...arr,...str]
      console.log('newArr: ', newArr);  //[111,222,333,"w","h","y"]
      // 构造对象时,为浅拷贝,修改深层属性会影响到原对象
      const obj = {name:"李斯",age:18,friend:{name:"张三",age:43}}
      const newObj = {...obj,address:"深圳市"}
      newObj.friend.name = "王五"
      // 此时两者的friend.name都变为王五了
      console.log('obj: ', obj);
      console.log('newObj: ', newObj); 
Symbol的用法

Symbol一般来说是作为独一无二标识使用的,可以作为对象的唯一属性名,在前面模拟call,apply的方法中,为了防止定义的属性名重复,就可以使用Symbol优化

      const n1 = Symbol()
      const n2 = Symbol()
      console.log(n1 === n2);  //false
      
      // ES10之后能加入描述,也能通过description获取
      const n3 = Symbol("这是n3的描述")
      console.log(n3.description); //这是n3的描述
      
      // 用Symbol可以作为对象的key
      const obj = {
        name:"李斯",
        [n1]:"这是n1",
        [n2]:"这是n2"
      }
      obj[n3]="这是n3"
      console.log('obj: ', obj);
      console.log(obj[n1],obj[n2],obj[n3]);  //查询
      
      // Symbol作为属性名,在遍历/Object.keys()等是获取不到属性名的
      console.log(Object.keys(obj)); //["name"]
      console.log(Object.getOwnPropertySymbols(obj)); //这个方法就可以获取到(只获取Symbol的)

      // Symbol也可以不是独一无二的(了解即可)
      const t1 = Symbol.for("key1")
      const t2 = Symbol.for("key1")
      console.log(t1===t2); //此时key相等,所以Symbol相等为true
      const k1 = Symbol.keyFor(t1)
      console.log('k1: ', k1);  //可以获取Symbol的key