var s =Symbol('Symbol类型的描述')
console.log(s.toString())// suuccess 'Symbol('Symbol类型的描述')'
console.log(s.description)// success 'Symbol类型的描述'
Symbol类型的运算和对比
Symbol不能与其他数据进行
Symbol可以调用toString方法,显示转换为字符串
Symbol值也可以转为布尔值,但是不能转为数值
let s =Symbol()
s +=100
console.log(s)// error Uncaught TypeError: Cannot convert a Symbol value to a numberlet s1 =Symbol()
console.log(s1 >100)// error Uncaught TypeError: Cannot convert a Symbol value to a numberlet s2 =Symbol()`your symbol is `+ s2 // error can't convert symbol to string
s2.toString()// success 'Symbol()'let s3 =Symbol()Boolean(s3)// success true!s3 // false true
创建Symnol类型的对象属性
提前创建Symbol类型的变量
var game ={
name:'俄罗斯方块',up:()=>{
console.log('up')},down:()=>{
console.log('down')}}var methods ={
up:Symbol(),
down:Symbol(),}
game[methods.up]=function(){
console.log('改变形状')}
game[methods.down]=function(){
console.log('快速下降')}
game[methods.down]()// success 快速下降
game[methods.up]()// success 改变形状
利用ES6新增的表达式定义属性名
var say =Symbol('say')var vote =Symbol('vote')var game2 ={
name:'狼人杀',[say]:function(){
console.log('发言')},[vote]:function(){
console.log('投票')}}
game2[say]()// 发言
game2[vote]()// 投票
不能用Symbol()直接作为属性名 因为这是一个表达式 不是一个固定的值
var game3 ={
name:'黄金矿工',Symbol('down'):function(){
console.log('放钩子')}// error 编辑器报错}