Symbol的含义?

ES6(2015) 引入了第七种原始数据类型SymbolSymbol英文文意思为 符号、象征、标记、记号,在 js 中更确切的翻译应该为独一无二

 Symbol的使用?

Symbol 值通过Symbol函数生成,这里需要注意Symbol函数前不能使用new命令,切记,切记,切记
let sym = Symbol()

1、接受一个字符串类型的参数
let a = Symbol("name")

a // Symbol(name)

a.toString() // "Symbol(name)" 

2、有无参数做对比

①有参数

let a1 = Symbol("name")
let a2 = Symbol("name")

a1 === a2 //false

可以看出a1,a2是Symbol的返回值并且参数相同但它们是不相等的。

②无参数

let a1 = Symbol()
let a2 = Symbol()

a1 === a2 //false

可以看出a1,a2是Symbol的返回值,但它们是不相等的。

3、不能与其他的数据类型进行运算

let s = Symbol("Hi Symbol")

s + "welcome your visit"

此时浏览器会报错 TypeError: can't convert symbol to string 意思是将Symbol 值不能与其他类型的值进行运算

4.显式转为字符串

let s = Symbol("Hello word")

第一种 String(s) //'Symbol("Hello word")'

第二种 s.toString() //'Symbol("Hello word")'

5.转布尔类型

let s = Symbol()

Boolean(s) // true

!s //false 

6.Symbol.prototype.description

此语法是为刚创建好的Symbol语法添加一个描述。

const s = Symbol("Hello Word")

读取描述:s.description // "Hello Word"

7.可以当属性名来使用(它的独一无二性质,可以防止键名被改写或覆盖)

let s = Symbol()

//第一种方式

let obj = {}

obj[s] = 'Hello Word';

//第二种方式

let obj = {

  [s]:'Hello Word'

}

//第三种方式

let obj = {}

Object.defineProperty(obj,s,{value:"Hello Word"})

obj[s] // "Hello Word"

8.Symbol.for() Symbol.keyFor()

 let a1 = Symbol.for("name")

 let a2 = Symbol.for("name")

 a1 === a2 //true

 两个相等的原因是Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,是会先检查给定的key是否已经存在,如果不存在才会新建一个值。

Symbol.keyFor()方法返回一个已登记的 Symbol 类型值的key

let a1 = Symbol.for("name");
Symbol.keyFor(s1) // "name" let a2 = Symbol("name");
Symbol.keyFor(s2) // undefined

ES6新增数据类型Symbol的更多相关文章

  1. es6 新增数据类型Symbol

    es6在string number boolean null undefined object之外又新增了一种Symbol类型. Symbol意思是符号,有一个特性—每次创建一个Symbol值都是不一 ...

  2. 浅谈ES6新增数据类型:Symbol

    面试中喜闻乐见的问题就是问我们的ES6新增了哪些个新特性 这篇文章一起学习一下新增的数据类型:Symbol JS的原始数据类型:6种Boolean,String,Undefined,NULL,Numb ...

  3. ES6的新增数据类型:Symbol

    简介:Symbol类型是es6新增的一个数据类型,Es5的基本数据类型(undefined,null,Object,function,Number,string) Symbol值通过Symbol函数生 ...

  4. ES6新数据类型Symbol

    Symbol 需计算字面量属性时使用 const benz = Symbol('benz'); const car = { [benz]: 'benz car' }; const info = Sym ...

  5. ECMAScript6新增数据类型symbol数据类型

    25.Symbol目的:为了解决对象之间属性名冲突的问题,Symbol它是引用数据类型. Symbol( ),它代表着一个独一无二的值 [name]: '小红',//加中括号代表默认创建了一个Symb ...

  6. ES6 新增数据类型检测 Set Map Proxy

    检测代码方法 function isNative(api){ return /native code/.test(api.toString())&&typeof api !== 'un ...

  7. ES6 新增基本数据类型Symbol

    ES6 增加了一个新的基本数据类型 symbol. 不过,和其他基本数据类型相比,它有点与众不同,因为它没有字面量的表现形式,而且创建的方式也有点奇怪,只能通过调用全局函数Symbol()来完成. l ...

  8. es6学习笔记--新数据类型Symbol

    学习了es6语法的symbol类型,整理笔记,闲时复习. Symbol 是es6新增的第七种原始数据类型(null,string,number,undefined,boolean,object),是为 ...

  9. ES6 之 第七种数据类型Symbol

    概述 为了减少对象的属性名冲突,ES6引入新的原始数据类型Symbol,JS的第七种数据类型. Symbol 能够保证每个属性的名字都是独一无二,这样就能从根本上防止属性名冲突. Symbol 值能够 ...

随机推荐

  1. CorelDRAW软件的出血位详解

    出血位,一种常见的印刷术语,在印刷品中,设计的图形一般比成品尺寸要大,会加一些延伸,专门用来给生产工艺中的公差范围使用,以避免最后裁切的成品中有白边或是裁到内容.多出来的部分在印刷后要被裁掉,这部分就 ...

  2. Guitar Pro吉他指弹入门——美式指弹

    说起指弹吉他,很多身边的琴友首先反应到的是押尾桑,岸部真明,伍伍慧等等指弹艺术家的日式指弹.笔者在初涉指弹的时候,也是如此,但是随着学习的加深,首先认识到了汤米大神(Tommy Emmanuel),然 ...

  3. H5系列之常用的语义元素

    H5添加了几个新标签,带有语义化的标签,像我们的div 和 span 标签,你说他两能干嘛呢, 好像他两什么事都能干.举个例子,你家里的房子,有几个房间,如果不分房间的话,是不是你 今天睡这里,明天睡 ...

  4. jQuery 第五章 实例方法 详解内置队列queue() dequeue() 方法

    .queue() .dequeue() .clearQueue() ------------------------------------------------------------------ ...

  5. 1、Go语言介绍

    一 Go语言介绍 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言. Go是静态强类型语言,是区别于解析型语言的编译型语言. 解析型语言--源代码是先翻译为中间代码, ...

  6. yii2.0验证码的两种实现方式

    第一种方式:采用model 1. 模型:Code.php <?phpnamespace app\models; use yii\base\Model;class Code extends Mod ...

  7. C语言讲义——函数

    为实现特定目的而编写的一段可被调用的代码 简单地讲:函数就是一组语句,取了个名字 别名:子例程(routine)/方法(Method,一般面向对象的语言使用这个叫法) 函数的组成部分 以主函数为例: ...

  8. Potato家族本地提权分析

    原文来自SecIN社区-作者:Zeva 0x00 前言 在实际渗透中,我们用到最多的就是Potato家族的提权.本文着重研究Potato家族的提权原理以及本地提权细节 0x01 原理讲解 1.利用Po ...

  9. Python爬虫合集:花6k学习爬虫,终于知道爬虫能干嘛了

    爬虫Ⅰ:爬虫的基础知识 爬虫的基础知识使用实例.应用技巧.基本知识点总结和需要注意事项 爬虫初始: 爬虫: + Request + Scrapy 数据分析+机器学习 + numpy,pandas,ma ...

  10. Java动态代理设计模式

    本文主要介绍Java中两种常见的动态代理方式:JDK原生动态代理和CGLIB动态代理. 什么是代理模式 就是为其他对象提供一种代理以控制对这个对象的访问.代理可以在不改动目标对象的基础上,增加其他额外 ...