目录

  • 前言:
  • 一、什么是 Symbol?
  • 二、Symbol 的特点
  • 三、Symbol 的使用
  • 总结:

前言:

ES5中对象的属性名都是字符串,容易造成重名,污染环境

一、什么是 Symbol?

Symbol 是 ES6 中引入的一种新的基本数据类型,用于表示一个独一无二的值。它是JavaScript中的第七种数据类型,与undefined、null、Number(数值)、String(字符串)、Boolean(布尔值)、Object(对象)并列。


二、Symbol 的特点

  1. Symbol属性对应的值是唯一的,解决命名冲突问题
let symbol = Symbol("one")
let symbol1 = Symbol("one")
console.log(symbol)
// 结果:Symbol("one")
  1. Symbol值不能与其他数据进行计算,包括同字符串拼串
let a = Symbol()
let b = a+1
console.log(b)
// 结果:报错
  1. for in, for of遍历时不会遍历symbol属性。
let symbol = Symbol();
let obj = {};
obj[symbol] = 'hello';for(var i in obj){console.log(obj[i])
}
// 结果:报错

三、Symbol 的使用

  1. 调用Symbol函数得到symbol值
let symbol = Symbol();
let obj = {};
obj[symbol] = 'hello';for(var i in obj){console.log(obj[i])
}
// 结果:报错
  1. 传参标识
let symbol = Symbol('one');
let symbol2 = Symbol('two');
console.log(symbol);// Symbol('one')
console.log(symbol2);// Symbol('two')
  1. 内置Symbol值
  • 除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法。

    • Symbol.iterator
  • 对象的Symbol.iterator属性,指向该对象的默认遍历器方法(后边讲)
  1. symbol != symbol symbol是唯一的
let one = Symbol("one")
let two = Symbol("one")console.log(one == two)
// 结果:false
  1. 创建symbol的属性值
let symbol = Symbol()let obj = {name:"张三疯",age:18}
  1. fon in for of 不会遍历symbol
obj[symbol] = "123"
console.log(obj)
for(var v in obj){console.log(obj[v])
}
// 结果:报错
  1. symbol 值不能与其他类型的值进行运算
let obj = {toString(){return "123"}
}
let a = Symbol(obj)
console.log(a+'1234')
// 结果:报错
  1. Symbol 值可以显式转为字符串。
let obj = {toString(){return "123"}
}
let a = Symbol(obj)console.log(String(a))
// Symbol(123)
console.log(a == String(a))
// false

总结:

以上就是 ES6中新增的 Symbol 的详解与用法,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog

Symbol 详解与用法相关推荐

  1. 最全ES6详解及用法

    最全ES6详解及用法 前言 babel babel使用方法 变量的定义 let.const this 和作用域 do 顶层对象 global对象 import class JS中的原型 原型语言 pr ...

  2. OpenCV Mat类详解和用法(官网原文)

    参考文章:OpenCV Mat类详解和用法 我马克一下,日后更 官网原文链接:https://docs.opencv.org/3.2.0/d6/d6d/tutorial_mat_the_basic_i ...

  3. windows下创建进程,CreateProcess()详解及用法

    windows下想要创建一个子进程不如linux的fork函数来得方便,通过CreateProcess函数创建一个新的进程,函数的定义如下 [cpp]  view plain copy BOOL Cr ...

  4. OpenCV Mat类详解和用法

    OpenCV Mat类详解和用法 我们有多种方法可以获得从现实世界的数字图像:数码相机.扫描仪.计算机体层摄影或磁共振成像就是其中的几种.在每种情况下我们(人类)看到了什么是图像.但是,转换图像到我们 ...

  5. 【ADB 操作命令详解及用法大全(非常全)】

    ADB操作命令详解及用法大全 一.ADB是什么?   ADB,即 Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供 ...

  6. spring注解详解与用法(总览)

    这篇文章收集了我写的所有的spring注解的详细说明与用法,点击可以跳转到对应文章,此文章会不断更新 spring注解详解与用法(1)最基础也是最常见的如下所示,详情点击这里 @Controller/ ...

  7. chatgpt赋能python:Python取ln函数详解:用法及常见问题解答

    Python取ln函数详解:用法及常见问题解答 Python取ln函数是一种非常常用的数学函数,它可以帮助开发者在计算中处理数据的自然指数对数.本篇文章将会介绍Python中取ln函数的基础知识,让您 ...

  8. 【C语言】结构体定义 typedef struct 用法详解和用法小结

    结构体定义 typedef struct 用法详解和用法小结 文章目录 结构体定义 typedef struct 用法详解和用法小结 0. 前言 1. 首先:在C中定义一个结构体类型要用typedef ...

  9. Object.keys()的详解和用法

    Object.keys()的详解和用法 在实际开发中,我们有时需要知道对象的所有属性; ES5 引入了Object.keys方法,成员是参数对象自身的(不含继承的)所有可遍历( enumerable ...

最新文章

  1. MySQL自带工具使用介绍
  2. javascript自动跳转
  3. Linux 设备驱动开发 —— platform 设备驱动
  4. OpenGL模板测试通俗理解
  5. 阿里云容器技术专家莫源:乘风踏雪归来,仍是此间少年
  6. 安装和卸载mysql
  7. python机器学习-sklearn挖掘乳腺癌细胞(五)
  8. 在windows下安装配置Ulipad
  9. asp.net 读取mysql数据库_asp.net访问MySQL数据库
  10. oc中该使用lock还是gcd/syncronize
  11. html中h标签可包含a标签,HTML中H标签P标签(Paragraph)img标签(image)a标签(anchor)
  12. 阿里云CentOS 7中zabbix4.2配置shell脚本邮件报警
  13. 这个Javascript“要求”是什么?
  14. Python+Selenium+Edge浏览器安装与简单运行(1/2)
  15. JS高级程序设计——阅读笔记一
  16. solidworks2013安装
  17. 计算机组成原理测试,计算机组成原理测试题及答案
  18. 设置水平线高度html代码是size,html水平线样式 Width:设置水平线的宽度
  19. 关于信息安全认证CISP与CISSP的对比及分析
  20. linux坏道检测修复脚本,Linux 磁盘坏道检测和修复

热门文章

  1. 自然语言处理NLP星空智能对话机器人系列:NLP on Transformers 101第二章
  2. pdf.js 字体无法显示
  3. linux登入系统失败20次添加黑名单
  4. 租用美国服务器 解决java延迟_如何降低美国服务器延迟?美国服务器延迟多少算正常?...
  5. 数据库事务和一致性处理
  6. Android UI开发——AppCompat实现Action Bar
  7. 重复制造报工后计划数量的消减
  8. 网上搜刮的一些腾讯游戏客户端开发(实习)面试的考题及部分答案
  9. 计算机视觉技术在水果分级中的应用,计算机视觉技术在水果分级处理中的应用概况及发展...
  10. 牛顿迭代法求平方根(C++)