文章目录

  • 一、Symbol是什么?
    • symbol对象不能用于数据运算,包括+、-、*、/等
  • 二、Symbol类型的创建
  • 三、Symbol的使用

一、Symbol是什么?

Symbol是ES6新增的基本数据类型。它的值通过Symbol函数生成,相同Symbol 函数返回的值是唯一的。

Symbol函数可以接收字符串作为参数,但是即使相同参数返回的也是唯一值。
即使是长得一样的,其实是不一样的两个东西。

示例:Symbol(’ miaov’) != Symbol(’ miaov’ )

symbol对象不能用于数据运算,包括+、-、*、/等

二、Symbol类型的创建

Symbol 类型都是独一无二的,可以保证不会与其他属性名产生冲突

let firstName = Symbol();
let person = {};
person[firstName] = "hhh";
console.log(person[firstName]); // "hhh"

注意: 由于Symbol 是一个原始类型的值,会返回一个属于自己的类型symbol,而不是什么string、object之类的,所以Symbol函数前不能使用new命令,否则会产生TypeError的报错。

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

三、Symbol的使用

1、代码如下(简单示例):

var Person = (function() {var symbol = Symbol('n');function P(name) {this.name = name;this[symbol ] = 10;}return P;
})();
var p1 = new Person('莫涛');
console.log(p1); // P {name: "莫涛",Symbol(n): 10}
console.log(p1[Symbo1('n')]); //undefined;   p1[Symbo1('n')等于调用了一次Symbol

2、属性私有化-数据保护(消除魔术字符串):

const shapeType = {triangle: Symbol()
};function getArea(shape, options) {let area = 0;switch (shape) {case shapeType.triangle:area = .5 * options.width * options.height;break;}return area;
}getArea(shapeType.triangle, { width: 100, height: 100 });

3、使用Symbol替代常量(防止对象属性名称冲突):

let mySymbol = Symbol();
// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
let a = {[mySymbol]: 'Hello!'
};
// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"

Symbol数据类型的创建和使用相关推荐

  1. ES6 Symbol 数据类型

    ES6-Symbol 类型 ES5 除类数组对象(类数组对象名可以为数字,对象必须有 length 属性,可以用数组下标的方式访问对象属性,但不能通过点的方式访问)外,对象属性名都是字符串,这很容易造 ...

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

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

  3. JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)

    JavaScript重难点解析1(数据类型) var.let.const区别: 类型补充 "==="."typeof"."instanceof&quo ...

  4. js中的Symbol数据类型

    最近,在学习vue的过程中碰到了一种从没有遇到过的数据类型:Symbol 查阅资料后,发现这是一种在ES6 中新添加的数据类型,好奇之下研究了下. Symbol 本质上是一种唯一标识符,可用作对象的唯 ...

  5. ES6 rest参数,扩展运算符,Symbol数据类型,迭代器和生成器 【详解加案例 】(二)

    文章目录 1.ES6 rest 参数 2. ES6 扩展运算符 2.1 ES6 简介 2.2 应用 3. ES6 Symbol 数据类型 3.1 Symbol两种创建方式 3.2 Symbol注意事项 ...

  6. mysql 数据表创建字段类型_MySQL 数据类型简介 创建数据表及其字段约束

    数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...

  7. 听说ES6中新增了能够与众不同的Symbol数据类型

    前言 小伙伴们大家好.不知道大家有没有遇到这样一种情况:在我们日常开发中,有时候可能会用到一些别人提供的对象,并且业务需要想要在这个对象的基础上进行一些扩展,添加一些属性或方法等.这个时候如果我们不了 ...

  8. MATLAB 基础知识 数据类型 表 创建和使用表

    本文说明如何根据工作区变量创建表,使用表数据,并将表写入文件以供日后使用.table 是一个数据类型,可将异构数据和元数据属性(例如变量名称.行名称.说明和变量单位)收集到一个容器中. 表适用于列向数 ...

  9. 数据库——MySQL(一)(数据库常用命令、数据类型、创建表与修改表结构、约束、约束修改添加)

    MySQL数据库的概述: MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库信息增.删.查.改管理 - ...

  10. MATLAB 基础知识 数据类型 时间表 创建时间表

    本文演示如何创建时间表.合并时间表以及将多个时间表中的数据调整到一个公共时间向量中.公共时间向量可以包含其中一个时间表或两个时间表中的时间,也可以是一个您指定的全新时间向量.以下示例演示如何计算和显示 ...

最新文章

  1. 在windowsXP系统下,如何通过手机蓝牙让电脑上网
  2. 自定义标签报 无法为TAG [my2:hello]加载标记处理程序类[null]
  3. NET问答: C# 中是否有最高效的方式对大文件做 checksum ?
  4. LeetCode 988. 从叶结点开始的最小字符串(DFS)
  5. Hibernate之Session merge与update方法
  6. jrtplib的编译方法
  7. struts2 log4j_Struts2和Log4j集成示例项目
  8. delphi之模拟按键
  9. 常见查找算法之—二分查找
  10. 计算机辅助遥感制图的基本过程,南京信息工程大学2018年遥感原理与应用考研初试大纲...
  11. SpringCloud微服务---学习笔记(二)--多级缓存
  12. java标书_java软件项目投标技术标书.doc
  13. mysql查询出现ambiguous的问题
  14. 【Jquery练习】tab栏切换
  15. 哈尔滨学计算机编程学校,哈尔滨中小学生编程学校排名
  16. C# 数据操作系列 - 13 SugarSql初探
  17. 解决 - Adobe Acrobat/Adobe Reader 的 Windows 任务栏图标异常
  18. 英雄联盟手游登录注册地与服务器不匹配,英雄联盟手游提示Unable to login地区不支持怎么解决 地区不支持解决方法_手心游戏...
  19. 关于显著性检验,有你想要的!
  20. maven项目搭建步骤

热门文章

  1. IT外包能够为企业带来哪些优点和劣势?
  2. 你知道什么是半自动驾驶系统吗
  3. 转摘:EXCHANGE PARTITION those pesky columns
  4. 推荐几个童趣满满的SVG模版
  5. 《算法图解》学习笔记(一):二分查找(附代码)
  6. c++ primer 模板与泛型编程学习小结
  7. leetcode:827. 最大人工岛
  8. 编写可维护的JavaScript 收纳架
  9. python 转化excel为markdown格式
  10. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛: B. Coin