symbol数据类型

js语言中,ES6前有6种数据类型。

ES6新提出symbol数据类型,所以symbol是js的第七种数据类型,表示独一无二的值。是一种类似于字符串的数据类型。

目的是为了防止属性名的冲突,保证对象中每一个属性名都是独一无二的。

let s1 = Symbol('foo');
let s2 = Symbol('foo');

s1 === s2 // false

Symbol类型可以有一个字符串参数,表示对Symbol实例的描述。所以相同描述的两个Symbol类型实例也是不相等的。

symbol出现的原因

ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因

Symbol特点

  • Symbol的值是唯一的,用来解决命名冲突的问题
  • Slymbol 值不能与其他数据进行运算
  • Symbol 定义的对象属性不能使用fr..in 循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名
  • Symbol函数前不能使用new命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型。
//创建Symbol
let s= Symbol();
console.log(s, typeof s);


// 试试创建2个symbol相同
let s2 = Symbol(' 辣鸡rb');
let s3 = Symbol(' 辣鸡rb');
console.log(s2 === s3); //false


//用Symbol.for创建一样的symbol
let s4 = Symbol.for('辣鸡rb');
let s5 = Symbol.for('辣鸡rb');
console.log(s4 === s5); //true


//不能与其他数据进行运算
let result = s   100;//报错,

文章结尾回顾一下js的数据类型

引用尚硅谷的一个记忆口诀

// USONB =>you are so .niubility 你是如此牛逼

// u=>undefined

// s=>string symbol

// 0=>object

// n=>null number

// b=>boolean

思考一下,决定再写点,

symbol的应用

在rb对象中添加up和down方法

方法1

let rb = {
    name: '日本战犯',
    age: 500,
};
// 用symbol处理
// 声明对象,里面包含两个方法,方法用symbol()写
let methods = {
    up: Symbol(),
    down: Symbol()
};
// 把方法加进去
rb[methods.up] = function () {
    console.log('原谅说的是人');
};
rb[methods.down] = function () {
    console.log('畜生没脸让中华儿女原谅它');
};
console.log(rb);

方法2

在rb对象中添加sb和dsb方法

let rb = {
    name: '日本战犯',
    age: 500,
    [Symbol('sb')]: function () {
        console.log('我喜欢日本动画');
    },
     [Symbol('dsb')]: function () {
         console.log('但不妨碍我恨他们在华夏大地犯的罪');
     },
};

console.log(rb);

Symbol内置的属性值

  • Symbol.hasInstance:其它对象使用instanceof运算符的时候会使用该属性名指向的内部方法。
  • Symbol.isConcatSpreadable
  • Symbol.species
  • Symbol.match
  • Symbol.replace
  • Symbol.search
  • Symbol.split
  • Symbol.iterator
  • Symbol.toPrimitive
  • Symbol.toStringTag
  • Symbol.unscopables

总结

到此这篇关于ES6中symbol数据类型的文章就介绍到这了,更多相关ES6的symbol数据类型内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

详细谈谈ES6中的symbol数据类型的更多相关文章

  1. JavaScript数据类型相关知识详解

    这篇文章主要介绍了JavaScript数据类型相关知识详解,文中有非常详细的代码示例,对正在学习js数据类型的小伙伴们有很好的帮助,需要的朋友可以参考下

  2. 详解如何使用webpack+es6开发angular1.x

    本篇文章主要介绍了详解如何使用webpack+es6开发angular1.x,具有一定的参考价值,有兴趣的可以了解一下

  3. 结合 ES6 类编写JavaScript 创建型模式

    这篇文章主要介绍了结合ES6类编写JavaScript创建型模式,本文开始系统性的对20多种JavaScript 设计模式进行简单概述,然后结合ES6类的方式来编写实例代码展示其使用方式,需要的朋友可以参考一下

  4. 详解Python数据类型、进制转换、字符串格式化的问题

    这篇文章主要介绍了Python数据类型、进制转换、字符串格式化,Python2中区分整型int、长整型long,Python3中只有统称为整型int,本文给大家介绍的非常详细,需要的朋友参考下吧

  5. 分析ES5和ES6的apply区别

    这篇文章主要介绍了分析ES5和ES6的apply区别,对ES6感兴趣的同学,可以参考下

  6. ES6的Promise用法详解

    本文详细讲解了ES6的Promise用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. Typescript中的数据类型实例总结

    ts中数据类型的定义是重点之一,所以必须明确ts有哪些数据类型,下面这篇文章主要给大家介绍了关于Typescript中数据类型的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  8. Python查看Tensor尺寸及查看数据类型的实现

    这篇文章主要介绍了Python查看Tensor尺寸及查看数据类型的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  9. python如何获取tensor()数据类型中的值

    这篇文章主要介绍了python如何获取tensor()数据类型中的值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  10. ECMAScript6入门教程

    本文详细讲解了ECMAScript6的基础教程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部