首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ES6学习之路10----Symbol

ES6学习之路10----Symbol

作者头像
Rattenking
发布2021-01-30 13:27:44
发布2021-01-30 13:27:44
47200
代码可运行
举报
文章被收录于专栏:RattenkingRattenking
运行总次数:0
代码可运行

什么是Symbol

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。 JavaScript 语言的七种数据类型:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)、Symbol。 作用:Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

代码语言:javascript
代码运行次数:0
运行
复制
let symbol = Symbol();
console.log(typeof symbol);;// symbol

1.Symbol函数前不能使用new命令,否则会报错。

代码语言:javascript
代码运行次数:0
运行
复制
let symbol = new Symbol();
//Uncaught TypeError: Symbol is not a constructor

2.Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

代码语言:javascript
代码运行次数:0
运行
复制
let symbol1 = Symbol('Rattenking');
let symbol2 = Symbol('Stone');

//控制台输出红色
console.log(symbol1);//Symbol(Rattenking)
console.log(symbol2);//Symbol(Stone)

//控制台输出黑色
console.log(symbol1.toString());//Symbol(Rattenking)
console.log(symbol2.toString());//Symbol(Stone)

3.Symbol 的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值。

代码语言:javascript
代码运行次数:0
运行
复制
let obj = {'a':'Rattenking'};
let sym = Symbol(obj);
console.log(sym);//Symbol([object Object])

//在对象中定义一个toString方法,调用该对象的toString的方法就会执行内部的toString方法
let obj1 = {
  toString() {
    return 'abc';
  }
};
let sym1 = Symbol(obj1);
console.log(sym1);// Symbol(abc)

4.Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。

代码语言:javascript
代码运行次数:0
运行
复制
let sym1 = Symbol();
let sym2 = Symbol();
console.log(sym1);//Symbol()
console.log(sym2);//Symbol()
sym1 === sym2//false

let sym1 = Symbol('Rattenking');
let sym2 = Symbol('Rattenking');
console.log(sym1);//Symbol('Rattenking')
console.log(sym2);//Symbol('Rattenking')
sym1 === sym2//false

5.Symbol 值不能与其他类型的值进行运算,会报错。

代码语言:javascript
代码运行次数:0
运行
复制
let sm = Symbol();
console.log(sm + 'Rattenking');
//Uncaught TypeError: Cannot convert a Symbol value to a string

6.Symbol 值也可以转为布尔值,但是不能转为数值。

代码语言:javascript
代码运行次数:0
运行
复制
let sm = Symbol();
console.log(Boolean(sm));//true
if(sm){console.log('sm is true');}//sm is true

console.log(sm + 1);
//VM328:5 Uncaught TypeError: Cannot convert a Symbol value to a number

总结:

  1. Symbol函数前不能使用new命令,否则会报错。
  2. Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。—-参数为字符串
  3. Symbol 的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值。—-如参数不是字符串会调用对象的toString方法
  4. Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。—-每一个Symbol 都是独一无二的
  5. Symbol 值不能与其他类型的值进行运算,会报错。—-不能进行运算
  6. Symbol 值也可以转为布尔值,但是不能转为数值。—-可转布尔,不能转数字

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/12/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Symbol
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档