微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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以及模块化机制,类的私有属性方法才变成可能。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐