ES6知识点(模板字符串,对象写法简化,Symbol)

模板字符串

两个特点 : 1 可换行 ,2 拼接直接以${...}的形式拼接

    结果:   

 对象写法简化

对象中属性相同的赋值可以简写,方法申明本来也可以简写(把冒号和小括号去掉)

等于右边

 Symbol

特点:

1 Symbol的值是唯一的,要来解决命名冲突的问题。

2 Symbol值不能与其他数据进行运算

3 Symbol定义的对象属性不能使用for ... in 遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名

Symbol创建方式:

 两种方式有些不同,上面两种是不一样的,下面两种是一样的。

作用:

1

在这之前,我们通常定义或访问对象的属性时都是使用字符串

let obj = {
  abc: 123,
  "hello": "world"
}

obj["abc"] // 123
obj["hello"] // 'world'

(abc属性可以通过obj.abc访问,也可以通过obj["...."]的形式访问)

而现在,Symbol可同样用于对象属性的定义和访问:

const a = Symbol()

let obj = {
  [a]: "一斤代码"
}

obj[a] // '一斤代码'
Symbol类型的key是不能通过Object.keys()或者for...in来枚举的,它未被包含在对象自身的属性名集合(property names)之中。所以,利用该特性,我们可以把一些不需要对外操作和访问的属性使用Symbol来定义。
作用2:
我们经常定义一组常量来代表一种业务逻辑下的几个不同类型,我们通常希望这几个常量之间是唯一的关系,为了保证这一点,我们需要为常量赋一个唯一的值(比如这里的'AUDIO'、'VIDEO'、 'IMAGE'),常量少的时候还算好,但是常量一多,你可能还得花点脑子好好为他们取个好点的名字。(因为常量用的是const不能只申明不复制,赋值很麻烦)
const TYPE_AUDIO = 'AUDIO'
const TYPE_VIDEO = 'VIDEO'
const TYPE_IMAGE = 'IMAGE'

function handleFileResource(resource) {
  switch(resource.type) {
    case TYPE_AUDIO:
      playAudio(resource)
      break
    case TYPE_VIDEO:
      playVideo(resource)
      break
    case TYPE_IMAGE:
      previewImage(resource)
      break
    default:
      throw new Error('Unknown type of resource')
  }
}

现在有了Symbol,我们大可不必这么麻烦了:

const TYPE_AUDIO = Symbol()
const TYPE_VIDEO = Symbol()
const TYPE_IMAGE = Symbol()

作用3:

在JavaScript中,是没有如Java等面向对象语言的访问控制关键字private的,类上所有定义的属性或方法都是可公开访问的。因此这对我们进行API的设计时造成了一些困扰。

而有了Symbol以及模块化机制,类的私有属性和方法才变成可能。

 

posted @ 2020-10-01 16:44  登峰至极  阅读(404)  评论(0编辑  收藏  举报