什么是Symbol

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。

JavaScript 语言的七种数据类型:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)、Symbol。

作用:Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

let symbol = Symbol();
console.log(typeof symbol);;// symbol

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

let symbol = new Symbol();
//Uncaught TypeError: Symbol is not a constructor

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

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 值。

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函数的返回值是不相等的。

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

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

let sm = Symbol();
console.log(sm + 'Rattenking');
//Uncaught TypeError: Cannot convert a Symbol value to a string

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

let sm = Symbol();
console.log(Boolean(sm));//true
if(sm){console.log('sm is true');}//sm is trueconsole.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 值也可以转为布尔值,但是不能转为数值。—-可转布尔,不能转数字

其他

我的博客,欢迎交流!

我的CSDN博客,欢迎交流!

微信小程序专栏

前端笔记专栏

微信小程序实现部分高德地图功能的DEMO下载

微信小程序实现MUI的部分效果的DEMO下载

微信小程序实现MUI的GIT项目地址

微信小程序实例列表

前端笔记列表

游戏列表

转载于:https://www.cnblogs.com/linewman/p/9918506.html

ES6学习之路10----Symbol相关推荐

  1. ES6学习笔记01:Symbol数据类型

    ES6学习笔记01:Symbol数据类型 1.Symbol定义 浏览demo01.html: 2.Symbol作对象属性名 Symbol函数可以接收一个字符串作为参数,表示对Symbol实例的描述,输 ...

  2. Damon的es6学习之路 -- 循环的学习(day 2)

    先总结下es6常用的几种循环: forEach,map,filter,some,every,indexOf,lastIndexOf,reduce,reduceRight 其中,粗体标记的是我目前认为会 ...

  3. Java学习之路10——多线程

    一.线程基本概念 1.Process(进程)与Thread(线程) 说起进程,就不得不说下程序.程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念. 而进程则是执行程序的一次执行过 ...

  4. GO语言学习之路10

    2022/02/01package mainimport ("fmt""strconv""strings" )//1.字符串中常用的系统函数 ...

  5. Qt学习之路(10): Meta-Object系统

    前面说过,Qt使用的是自己的预编译器,它提供了对C++的一种扩展.利用Qt的信号槽机制,就可以把彼此独立的模块相互连接起来,不需要实现知道模块的任何细节. 为了达到这个目的,Qt提出了一个Meta-O ...

  6. JavaScript仿淘宝京东放大镜效果(鼠标事件)------JavaScript学习之路10

    JavaScript仿淘宝京东放大镜效果 注意 一定计算好放大比例,本程序放大5倍,具体放大倍数,自定 效果 完整源码 <!DOCTYPE html> <html lang=&quo ...

  7. typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类)

    提起类,不得不说一下,强类型编程语言,如php,java,c++等都有类的概念.而js作为一门弱类型语言,是没有类这个概念的,虽然也能模拟类的实现,但总归不是类.so,ts也只是模拟类而已,使得更贴切 ...

  8. typescript学习之路(四) —— ts类的继承(包含es5以及es6的类继承)

    上一文已经写了es5,es6等类的定义,所以本章主要写es5和es6的继承,由于es6的继承和ts的继承如出一辙,只是加了类型定义而已,所以ts的继承稍微写下,不会太详细. 文章目录 es5继承 原型 ...

  9. ESP8266 WIFI模块学习之路(10)——手机远程关闭电脑

    在博文ESP8266 WIFI模块学习之路(9)中已经实现了电脑读出USB串口的数据,如图 在博文C语言实现电脑关机程序中学习了如何实现电脑关机及其它的一些功能. 因此,通过这两个博文完全可以实现手机 ...

  10. TypeScript入门学习之路

    TypeScript学习之路 TypeScript学习之路 安装typescript环境 typescript起步 typescript开发工具vscode自动编译.ts文件 typescript中的 ...

最新文章

  1. We PE U盘安装win7系统
  2. 04-Servlet入门+http协议
  3. mysql 获取子分类_MySQL 自定义函数获取一个分类的无限级子分类
  4. 【Java】辨析JUnit4中的@AfterClass、@BeforeClass、@after、@before
  5. c#把日期改成数字字符串_C#编写壹个函数将输入的中文日期转换为阿拉伯数字日期...
  6. 二叉树——二叉树的深度(洛谷 P4913)
  7. python爬虫基本原理_Python爬虫【一】爬虫的基本原理
  8. boost.asio无锁异步并发
  9. 好程序员分享如何看待CSS中BEM的命名方式?
  10. 微服务~Consul服务注册与发现
  11. 模拟SAP ALV下载XLSX文件
  12. 详解站长之家之站长工具四大新功能
  13. java smtp服务器,用Java实现SMTP服务器
  14. quartz mysql 表_Quartz数据库表分析
  15. ubuntu 18.04 英伟达显卡驱动
  16. 山东省软件设计大赛参赛心得
  17. 跨越信息沟通的障碍,构建企业高效应用平台
  18. CSS mask遮罩
  19. UIView的frame与bounds
  20. java数据容器_Java容器概览

热门文章

  1. iPhone 6/6 Plus 出现后,如何改进工作流以实现一份设计稿支持多个尺寸?
  2. ie版本过低提示升级ie的示例
  3. Heap与Stack的区别(转载,刚看到的)
  4. 集成学习 Bagging, Boosting, Stacking
  5. 一种全新易用的基于Word-Word关系的NER统一模型,刷新了14种数据集并达到新SoTA...
  6. 泛化性的危机!LeCun发文质疑:测试集和训练集永远没关系...
  7. 【Linux】高效快速的指令:linux磁盘管理、vi、sed、find、grep、awk等
  8. 【珍藏版】 200个机器学习 NLP Python 免费相关教程
  9. 传统机器学习流程总结
  10. 每日算法系列【LeetCode 233】数字 1 的个数